re模块自己是用来操做正则表达式,与正则自己没有关系python
正则表达式是用来匹配处理字符串的 python 中使用正则表达式须要引入re模块正则表达式
如:函数
import re #第一步,要引入re模块工具
re.match(pattern表达式规则, string)测试
import re print(re.match('www', 'www.runoob.com')) # 在起始位置匹配 print(re.match('com', 'www.runoob.com')) # 不在起始位置不匹配
re.search("匹配规则", "要匹配的字符串")code
import re ret = re.serch('\d','alex83') print(ret) if ret: print(ret.group()) #若是返回对象,用group取值
re.findall("匹配规则", "要匹配的字符串")对象
re.finditer内存
import re ret = re.finditer('\d','asfjsdf12jidfiewjfi'*200000) #ret是一个迭代器 for i in ret: #迭代出来的每一项都是一个对象 print(i.group()) #经过group取值便可
re.compile 编译方法rem
import re s= 'asfjsdf12jidfiewjfi' ret = re.compile('\d+') r1 = ret.seach('alex83') r2 = ret.findall('wusir73')
扩展字符串
import re # ret = re.search("<(?P<tag_name>\w+)>\w+</w+>","<h1>hello</h1>") # print(ret.group('tag_name')) # print(ret.group()) ret = re.search("<(?P<tag_name1>\w+)>\w+</\w+>","<h1>hello</h1>") #还能够在分组中利用?的形式给分组起名字 #获取的匹配结果能够直接用group('名字') 拿到对应的值 print(ret.group('tag_name1')) #结果 :h1 print(ret.group()) #结果 :<h1>hello</h1>
findall 遇到分组时,优先显示分组中的内容
?: 取消分组优先展现
import re s1 = '1-2*(60+(-40.35/5)-(-4*3))' res=re.compile(r'\d+\.\d+?|(?:\d+)') ret=re.findall(res,s1) # ret.remove('') print(ret)
分组编号
s1 = '<h1>wahaha</h1>' s2 = '<a>wahaha ya wahaha</a>' import re ret = re.search('<(\w+)>(.*?)</\w+>',s1) print(ret) print(ret.group(0)) # group参数默认为0表示取整个正则匹配的结果 print(ret.group(1)) # 取第一个分组中的内容 print(ret.group(2)) # 取第二个分组中的内容
分组命名
(?P <名字> 正则表达式)
s1 = '<h1>wahaha</h1>' s2 = '<a>wahaha ya wahaha</a>' ret = re.search('<(?P<tag>\w+)>.*?</(?P<tag2>\w+)>',s1) #(?P<tag>) print(ret.group('tag'))
引用分组
s1 = '<h1>wahaha</h1>' s2 = '<a>wahaha ya wahaha</a>' ret = re.search('<(?P<tag>\w+)>.*?</(?P=tag)>',s1) #(?P=tag) print(ret.group('tag'))
#经典例题 #有的时候咱们想匹配的内容包含在不相匹配的内容当中,这个时候只须要把不想匹配的先匹配出来,再经过手段去掉 import re ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))") print(ret) ret.remove('') print(ret)
编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。经常使用的flags有:
标志 | 含义 |
---|---|
re.S(DOTALL) | 使.匹配包括换行在内的全部字符 |
re.I(IGNORECASE) | 使匹配对大小写不敏感 |
re.L(LOCALE) | 作本地化识别(locale-aware)匹配,法语等![]() |
re.M(MULTILINE) | 多行匹配,影响^和$ |
re.X(VERBOSE) | 该标志经过给予更灵活的格式以便将正则表达式写得更易于理解 |
re.U | 根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B |
#示例 re.compile(pattern,flags=0) pattern: 编译时用的表达式字符串。 flags 编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,多行匹配等。
\\n
匹配\n
===>r'\n'
\\\\n
匹配\\n
===>r'\\n'