re.split re.finditer re.findall re.sub,re.search
@(python3)
官方 re 模块说明文档 /developerworks/cn/opensource/os-cn-pythonre/
pile() 函数
编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。
re 模块最离不开的就是 pile 函数。其他函数都依赖于 compile 创建的 正则表达式对象
pile(pattern, flags=0)
pattern 指定编译时的表达式字符串flags 编译标志位,控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
flags 标志位参数
re.I(re.IGNORECASE)
使匹配对大小写不敏感
re.L(re.LOCAL)
做本地化识别(locale-aware)匹配
re.M(re.MULTILINE)
多行匹配,影响 ^ 和 $
re.S(re.DOTALL)
使 . 匹配包括换行在内的所有字符
re.U(re.UNICODE)
根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X(re.VERBOSE)
该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
示例:
findall 返回的是一个 list 对象
<class '_sre.SRE_Pattern'>
<class 'list'>
['wang', 'WANG']
re.S的作用
import rea = """sdfkhellolsdlfsdfiooefo:877898989worldafdsf"""b = re.findall('hello(.*?)world',a)c = re.findall('hello(.*?)world',a,re.S)print ('b is ' , b)print ('c is ' , c)# 输出结果:# b is []# c is ['lsdlfsdfiooefo:\n877898989']
re.split 函数
按照指定的 pattern 格式,分割 string 字符串,返回一个分割后的列表。
re.split(pattern, string, maxsplit=0, flags=0)
pattern compile 生成的正则表达式对象,或者自定义也可string 要匹配的字符串maxsplit 指定最大分割次数,不指定将全部分割
?
结果:
['say', ' ', 'hello', ' ', 'world!', ' ', 'hello', ' ', 'python']
['one', '1', 'two2three3four4']
re.findall() 方法
返回一个包含所有匹配到的字符串的列表。
pattern 匹配模式,由 pile 获得string 需要匹配的字符串
?
结果
[('he', 'll', 'o '), ('he', 'll', 'o ')]
re.sub
将字符串中的匹配项替换为其他函数原型def sub(pattern, repl, string, count=0, flags=0)
1参数说明 pattern:正则表达式,匹配被替换的项repl:替换为该项string:要匹配的字符串count:替换的个数,默认为0时表示全部替换
re.finditer 、re.findall
re.findall(pattern, string[, flags=0])re.finditer(pattern, string[, flags=0])
pattern compile 生成的正则表达式对象,或者自定义也可string 要匹配的字符串
findall 返回一个包含所有匹配到的字符的列表,列表类以元组的形式存在。
finditer 返回一个可迭代对象。
示例一:
?
输出结果:
<class 'callable_iterator'>
<callable_iterator object at 0x10545ec88>
123456@
234567@
345678@
<class 'list'>
['123456@', '234567@', '345678@']
由结果可知:finditer 得到的是可迭代对象,finfdall 得到的是一个列表。
示例二:
?
输出结果:
<class 'callable_iterator'>
<callable_iterator object at 0x104c5cbe0>
邮箱号码是: 123456 邮箱类型是: 163
邮箱号码是: 234567 邮箱类型是: 163
邮箱号码是: 345678 邮箱类型是: 163
{'123456': '163', '234567': '163', '345678': '163'}
+++++++++++++++++++++++++++++++
[('123456', '163'), ('234567', '163'), ('345678', '163')]
<class 'list'>
finditer 得到的可迭代对象 i,也可以使用 lastindex,lastgroup 方法。
print('lastgroup 最后一个被捕获的分组的名字',i.lastgroup)
findall 当正则没有分组,返回就是正则匹配。
?
有一个分组返回的是分组的匹配
?
多个分组时,将结果作为 元组,一并存入到 列表中。
?
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
/regex/javascript
正则表达式在线生成工具:
/regex/create_reg
如果觉得《Python3正则匹配re.split re.serach re.sub re.finditer及re.findall函数用法详解》对你有帮助,请点赞、收藏,并留下你的观点哦!