正则表达式笔记
'''
#re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
#re.search 扫描整个字符串并返回第一个成功的匹配
#findall 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
#re.finditer 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
#re.split split方法按照能够匹配的子串将字符串分割后返回列表 re.split(pattern, string[, maxsplit=0, flags=0])
#注意: match 和 search 是匹配一次 findall 匹配所有
# 对于一个找不到匹配的字符串而言,split 不会对其作出分割
函数语法:
re.match(pattern, string, flags=0)
re.search(pattern, string, flags=0)
re.findall(string[, pos[, endpos]])
re.finditer(pattern, string, flags=0)
re.split(pattern, string[, maxsplit=0, flags=0]) #pattern 匹配的正则表达式
#string 待匹配的字符串。
#pos 可选参数,指定字符串的起始位置,默认为 0。
#endpos 可选参数,指定字符串的结束位置,默认为字符串的长度。
#maxsplit 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
其中的flags则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志如下
修饰符 描述
re.I 使匹配对大小写不敏感 (Ignore case)
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $ (MultiRow)
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
'''
import re
#print(re.match('www', 'www.runoob.com').span()) # match会在起始位置匹配
#print(re.match('com', 'www.runoob.com'))
#print(re.search("[a-z]+[0-5]{3}",'NMasad123354675',flags= re.I).span())#返回匹配的下标号
#print(re.search("[a-z]+[0-5]{3}",'NMasad123354675',flags= re.I))
print(re.findall(r"\d+","1243afjhf1243"[:]))#返回列表
it = re.finditer(r"\d+","1243afjhf1243")
for i in it:
print(i.group())#group() 返回被RE匹配的字符串
import re
line = "Cats are smarter than dogs"
searchObj = re.search(r"(.*?) (.*?) .*",line, re.M|re.I)
if searchObj:
print ("searchObj.group() : ", searchObj.group())
print ("searchObj.group(1) : ", searchObj.group(1))
print ("searchObj.group(2) : ", searchObj.group(2))
else:
print ("Nothing found!!")
'''
#我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
'''
#. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式
#* 匹配0个或多个的表达式。会优先考虑有的情况
#+ 匹配1个或多个的表达式。会优先考虑1个的情况
#? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方法
#注意:正则匹配默认是贪婪匹配,也就是匹配尽可能的多的字符

#练习
import re
print("贪婪方法 :",re.match(r"^(\d+)(0*)$","10023400").group(1))#贪婪方法
print("非贪婪方法 :",re.match(r"^(\d+?)(0*)$","10023400").group(1))#非贪婪方法
print(re.split("[,|\\s]+","a b , d|aa"))
pattern =re.compile(r"\d+")
print(pattern.search("123sjkfh134").start())
print(pattern.search("123sjkfh134").end())
'''
#检索和替换 re模块提供了re.sub用于替换字符串中的匹配项
语法:re.sub(pattern, repl, string, count=0)
pattern: 正则中的模式字符串。
#repl: 替换的字符串,也可为一个函数。
string: 要被查找替换的原始字符串。
count: 模式匹配后替换的最大次数,默认0表示替换所有的匹配。
'''
练习:
import re
phone = "2004-959-559 # 这是一个电话号码"
# 删除注释
num = re.sub(r'#.+', "", phone)
print("电话号码 : ", num)
# 移除非数字的内容
num = re.sub(r'\D', "", phone)
print("电话号码 : ", num) #以下实例中将字符串中的匹配的数字乘于2
def double(matched):
value = int(matched.group('chengyu'))
return str(value * 2) s = 'A23G4HFD567'
print(re.sub('(?P<chengyu>\d+)', double, s)) #repl参数是一个函数
print(re.search(r"(?P<name>[a-z]{3})","chengyu31232ashhcv").group("name"))
'''
#compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用
当我们在Python中使用正则表达式的时候,re模块内会做两件事:
1.比编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2.用编译后的正则表达式取匹配字符串
如果一个正则表达式重复调用很多次,出于对效率的考虑,我们可以预编译正则表达式,
这样接下来重复使用就不需要编译这一步了,可以直接使用
语法:
re.compile(pattern[, flags])
'''

python模块_re模块的更多相关文章

  1. Python 正则表达式_re模块_使用compile加速

    使用compile加速 compile( rule [,flag] ) 将正则规则编译成一个Pattern对象,以供接下来使用. 第一个参数是规则式,第二个参数是规则选项. 返回一个Pattern对象 ...

  2. python中string模块各属性以及函数的用法

    任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作.     python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串 ...

  3. python之platform模块

    python之platform模块 ^_^第三个模块从天而降喽!! 函数列表 platform.system() 获取操作系统类型,windows.linux等 platform.platform() ...

  4. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  5. python之sys模块详解

    python之sys模块详解 sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和我一起走进python的模块吧! sys模块的常见函数列表 sys.argv: 实现从程序外部向程序传 ...

  6. 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)

    一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...

  7. [Python Day5] 常用模块

    目录: 1.模块介绍 2.time & datetime 3.random 4.OS 5.sys 6.shutil 7.json & pickle 8.shelve 9.xml 处理 ...

  8. python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合. 而对于一个复杂的功能来,可能需要多个函数 ...

  9. linux下python调用c模块

    在C调用Python模块时需要初始化Python解释器,导入模块等,但Python调用C模块却比较简单,下面还是以helloWorld.c 和 main.py 做一说明:   (1)编写C代码,hel ...

随机推荐

  1. smartpass

    1.smartpass 是用户注册后,产生的用户名密码 与每个摄像头的用户名密码不一致 2.每个设备初始化登录密码为admin admin,如果需要修改,则在进入该设备IP地址,设置——>用户管 ...

  2. 使用pycharm调用模块后字体变灰

    点击小灯泡提示出现以下内容:This inspection detects names that should resolve but don't. Due to dynamic dispatch a ...

  3. Java并发(四)线程池使用

    上一篇博文介绍了线程池的实现原理,现在介绍如何使用线程池. 目录 一.创建线程池 二.向线程池提交任务 三.关闭线程池 四.合理配置线程池 五.线程池的监控 线程池创建规范 一.创建线程池 我们可以通 ...

  4. Android学习之Button按钮在程序运行时全部变大写的处理

    问题: 在layout布局文件中,我们命名的按钮名称是“button1”,程序运行过后,在app上显示出来的是“BUTTON1”,先看源代码和效果: 按钮源代码: 运行效果: 解决办法: 方法一: 在 ...

  5. Mybatis学习总结(二)——Mapper代理开发

    一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...

  6. Zephyr的Power Management

    1 关于Zephyr Zephyr是Linux基金会维护的微内核项目,来源于WindRiver向Zephyr捐赠的Rocket RTOS内核.主要用于开发针对物联网设备的实时操作系统. Zephyr操 ...

  7. java 之UDP编程

    大白话:每一台电脑都有自己的ip地址,向指定的ip地址发数据,数据就发送到了指定的电脑.UDP通信只是一种通信方式而已,其特点就不多说.有了ip地址数据就能发送到指定的电脑了,但是呢!我把数据发送到电 ...

  8. 谈谈ThreadLocal的设计及不足

    用Java语言开发的同学对 ThreadLocal 应该都不会陌生,这个类的使用场景很多,特别是在一些框架中经常用到,比如数据库事务操作,还有MVC框架中数据跨层传递.这里我们简要探讨下 Thread ...

  9. .Net core使用EF Core Migration做数据库升级

    ---恢复内容开始--- (1)VS Code下创建含有授权功能的并且使用localdb作为数据库的命令 dotnet new -au individual -uld --name identityS ...

  10. Xamarin开发的一个简单画图程序分享

    最近Xamarin比较火,于是稍微看了下,感觉接触过MVC的都应该能很快上手,还挺有意思,于是忍不住写了个简单的画图程序,之前看帖子有人说装不上或者无法部署,估计我比较幸运,编译完了一次就安装成功了, ...