最近也用到了重新模块,内嵌的重新模块提供了正则表达式相关的功能。传说中,正则表达式模式被编译成一系列的字节码,然后由用Ç编写的匹配引擎执行。
常用的方法如下:
模式:匹配的正则表达是
串:要匹配的字符串
国旗:标识位
1:re.match(pattern,string,flags = 0)
从字符串的起始位置进行匹配,如果不是起始位置匹配成功的话,匹配()就返回无。如果匹配成功,则返回的应该是MatchObject,MatchObject还有一系列方法,后面介绍
2:re.search(pattern,string,flags = 0)
扫描整个字符串,并返回第一个成功的匹配,否则返回无。匹配成功,返回的是MatchObject
3:re.sub(pattern,repl,string,count = 0,flags = 0)替换字符串中的匹配项。
REPL:替换的字符串,也可以为一个函数(可以为函数名称,调用函数,对匹配的内容进行处理),返回的是替换后的字符
count:模式匹配后替换的最大次数,默认0表示替换所有的匹配
4:re.compile(pattern [,flags])// flags:可选
用于编译正则表达式,生成一个正则表达式(Pattern)对象,供match()和search(),findall这两个函数使用。
例如:pattern = re.compile(r'\ d +')
m = pattern.match('one12twothree34four')
5:re.findall(string [,pos [,endpos]])
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
也可以先进行编译,然后pattern.findall()方式调用
6:re.finditer(pattern,string,flags = 0)
和findall类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
7:re.split(pattern,string [,maxsplit = 0,flags = 0])// maxsplit分隔次数,maxsplit = 1分隔一次,默认为0,不限制次数
按照能够匹配的子串将字符串分割后返回列表
例如:
string_test =“123234567890”
pattern = '23'
match = re.split(pattern,string_test)
输出的结果为['1','4567890']
8: MatchObject的属性和方法
方法/属性 | 作用 |
group() | 返回被 RE 匹配的字符串 |
start() | 返回匹配开始的位置 |
end() | 返回匹配结束的位置 |
span() | 返回一个元组包含匹配 (开始,结束) 的位置 |
9: flags 可选标志
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
10: 正则表达式模式匹配规则
有很多匹配规则,下面列出常用的内容:
*: 匹配0个或者多个
+:匹配1个或者多个
?:匹配0个或者1个
():括号内的表达式,表示一个组,匹配的时候,findall的时候,会返回()中的内容