Python编程——正则表达式

\d 匹配数字
\w 匹配字母或数字
\s 匹配空白字符,等价[ \t\n\r\f]
\大写 与\小写内容相反
[^0-9] 匹配非字数
. 匹配任意字符
[0-9a-zA-Z\_] 匹配一个数字、字母或者下划线
\\\\ 匹配\

* 匹配任意个字符
+ 匹配至少一个字符
? 匹配0个或1个字符
{n} 匹配n个字符
{n,m} 匹配n-m个字符

A|B 匹配A或B
^ 行的开头
$ 行的结束

(?i) 表示所在位置右侧的表达式开启忽略大小写模式
(?s) 表示所在位置右侧的表达式开启单行模式
(?m) 表示所在位置右侧的表示式开启指定多行模式
(?is) 更改句点字符 (.) 的含义,以使它与每个字符(而不是除 \n 之外的所有字符)匹配
(?im) 更改 ^ 和 $ 的含义,以使它们分别与任何行的开头和结尾匹配,而不只是与整个字符串的开头和结尾匹配

注意:(?s)通常在匹配有换行的文本时使用
注意:(?m)只有在正则表达式中涉及到多行的“^”和“$”的匹配时,才使用Multiline模式,上面的匹配模式可以组合使用,比如(?is),(?im)
另外,还可以用(?i:exp)或者(?i)exp(?-i)来指定匹配的有效范围

re模块

import re
# 使用r前缀,则无需考虑转义
re.match(r'regex',str) # 从字符串开头开始匹配 返回Match对象或None
re.search(r'regex',string) # 返回第一个成功匹配的结果 返回Match对象或None
re.findall(r'regex',string) # 返回所有成功匹配的结果 返回list或[]
re.finditer(r'regex', string) # 返回所有成功匹配的结果 返回迭代器
re.split(r'\s+', 'a b   c') # 使用正则表达式切割连续空格

# 使用repl替换string中的匹配项最多count次,0表示全部替换 
# repl可以是函数,输入为匹配项,输出为替换内容
re.sub(r'regex',repl,string,count=0) 

# 使用修饰符re.S或re.I
# re.S 匹配节点与节点间的换行,将整个字符串整体进行匹配,否在在每一行内匹配
# re.I 使匹配对大小写不敏感
re.findall(r'regex',string,re.S) 

m = re.match(r'(group1)(group2)',str) # 分组()
m.groups()
m.group(0) # group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串
m.span() # 输出匹配范围

re_regex = re.compile(r'regex') # 预编译正则表达式
re_regex.match(str)

正则匹配默认贪婪匹配(尽可能匹配多的字符),使用?采用非贪婪匹配

在线测试网站

https://tool.oschina.net/regex

https://regex101.com/

发表评论