flags(控制标记)
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符(默认.匹配除换行符之外的所有字符)
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
raw string(原生字符串类型)
raw string:不包含转义符的字符串(也就是说原生字符串中 \ 不被转义成转义字符),表示方法:r“\d”
string:默认string中的 \ 就是转义字符,当想要使用正则表达式中的\d,我们需要写成‘\d’
当使用转义\时,建议使用raw string
re库主要功能说明
- re.search():在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
- re.match():在一个字符串的开始位置起匹配正则表达式,返回match对象
- re.findall():搜索字符串,以列表类型返回全部能匹配的子串
- re.split():将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
- re.finditer():搜索字符串,返回匹配结果的迭代类型,每个迭代元素是match对象
- re.sub():在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串
具体说明
- re.search(pattern,string,flags=0)
pattern:正则表达式字符串或原生字符串
string:待匹配字符串
flags:正则表达式使用的控制标记(本文开头)
import re
match=re.search(r'[1-9]\d{5}',BIT 100081)
if match:
//group(0)表示匹配全部字符串返回匹配内容,match的类型是match对象
print(match.group(0))
out>>10081
- re.match(pattern,string,flag=0)与search参数同理
import re
match=re.match(r'[1-9]\d{5}','BIT 100081')
if match:
print(match.group(0))
out>>
当没有if语句直接输出match.group(0)会报错,这是因为当未匹配到字符串的时候,返回的match的类型是‘NoneType’,不是match对象,不具备group属性
import re
match=re.match(r'[1-9]\d{5}',‘100081 BIT’)
if match:
print(match.group(0))
out>>100081
- re.findall(pattern,string,flag=0)
import re
match=re.findall(r'[1-9]\d{5}','BIT100081 UTS100085')
if match:
print(match.group(0))
out>>['100081','100085']
- re.split(pattern,string,maxsplit=0,flag=0)
maxsplit:最大分割数,剩余部分作为最后一个元素输出
import re
match=re.split(r'[1-9]\d{5}','BIT100081 UTS100085')
if match:
print(match.group(0))
out>>['BIT',' UTS','']
match=re.split(r'[1-9]\d{5}','BIT100081 UTS100085',maxsplit=1)
out>>['BIT',' UTS100085']
- re.finditer(pattern,string,flag=0)
import re
for m in re.finditer(r'[1-9]\d{5}','BIT100081 UTS100085'):
if m:
print(m.group(0))
out>>100081
100085
- re.sub(pattern,repl,string,count=0,flags=0)返回替换后的字符串(返回的结果是字符串)
repl:替换匹配字符串的字符串
count:匹配的最大替换次数
import re
match=re.sub(r'[1-9]\d{5}',':******','BIT100081 UTS100085')
print(match)
out>>BIT:****** UTS:******
Match对象
-
Match的属性:
- .string:待匹配的文本
- .re:匹配时使用的pattern对象(正则表达式)
- .pos:正则表达式搜索文本的开始位置
- .endpos:正则表达式搜索文本的结束位置
-
Match的方法:
- .group(0):获取匹配后的字符串
- .start():匹配字符串在原始字符串的开始位置
- .end():匹配字符串在原始字符串的结束位置
- .span():返回(.start(),.end())元组类型
eg:
import re
m=re.search(r'[1-9]\d{5}','BIT100081 UTS100085')
>>>m.string ---->'BIT100081 UTS100085'
>>>m.re ---->re.complie('[1-9]\\d{5}') (经过re.complie的才是真正的正则表达式,没有经过complie的仅仅是正则的一种表示)
>>>m.pos ---->0
>>>m.endpos ---->19
>>>m.group(0) ---->100081 返回第一次匹配的结果
>>>m.start() ---->3
>>>m.end() ---->9
>>>m.span() ---->(3,9) 左闭右开
贪婪匹配和最小匹配
- 贪婪匹配
re库默认采用贪婪匹配,即输出最长的子串
match=re.search(r'a.*n','aynnnnnnn')
>>>match.group(0) ----->aynnnnnnn
- 最小匹配操作符
- *? 前一个字符0次或无限次扩展,最小匹配
- +? 前一个字符一次或无限次扩展,最小匹配
- ?? 前一个字符0次或1次扩展,最小匹配
- {m,n}? 扩展前一个字符m至n次(含n),最小匹配
match=re.search(r'a.*?n','aynnnnnnn')
>>>match.group(0) ----->ayn
re.complie()编译成正则表达式对象
regex=re.complie(‘表达式’)+regex.主要功能(string)=re.主要功能(‘表达式’,‘string’)
regex=re.complie(r'a.*?n') + regex.search('aynnnnnnn')
=re.search(r'a.*?n','aynnnnnnn')