正则
-
匹配规则
模式 匹配内容 \w 匹配字母,数字,下划线 \W 与\w相反 \s 匹配空字符 <==> [\t\n\r\f] \S 与\s相反 \d 匹配数字 <==> [0-9] \D 匹配非数字 \A 匹配字符串开头 \Z 匹配字符串结尾, 如果存在换行,只匹配到换行前的结束字符串 \z 匹配字符串结尾,如果存在换行,同时还会匹配换行符 \G 匹配最后匹配完成的位宣 \n 匹配一个换行符 \t 匹配一个制表衔’ ^ 匹配一行字符串的开头 $ 匹配一行字符串的结尾 . 匹配任意字符,除了换行符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符 [ …] 用来表示一组字符,单独列出 , 比如[ amk ]匹配 a 、 m 或 k [^…] 不在[]中的字符,比如(’ abc ]匹配除了 a 、 b 、 c 之外的字符 * 匹配 0 个或多个表达式 + 匹配 1 个或多个表达式 ? 匹配 0 个或 l 个前面的正则表达式定义的片段,非贪婪方式 {n} 精确匹配 n 个前面的表达式 {n, m} 匹配 n 到 m 次由前面正则表达式定义的片段,贪婪方式 alb 匹配 a 或 b () 匹配括号内的表达式,也表示一个组 -
match
import re content = 'Hello 123 4567 World_This is a Regex Demo' result = re.match(r'^Hello\s(\d{3})\s(\d{4})\s\w{10}', content) print(result.group()) # 返回匹配到的内容 Hello 123 4567 World_this # 匹配目标 print(result.group(1)) # 123 print(result.group(2)) # 4567 print(result.span()) # 返回匹配位置(0, 25)
通用匹配
""" .*对任意字符匹配无限次 """ re.match(r'^Hello.*Demo$', content)
贪婪与非贪婪
""" .* 为贪婪匹配 .*? 为非贪婪匹配 匹配时 字符串中间: 尽量少的匹配,使用 .*? 非贪婪匹配,以免匹配结果缺失 字符串结尾: 尽量多的匹配,使用 .* 贪婪匹配, 以免结果缺失 """ re.match(r'^He.*(\d+)', 'Hello 1234 World').group(1) # 结果为 4 re.match(r'^He.*?(\d+)', 'Hello 1234 World').group(1) # 结果为 1234 re.match(r'^He.*?(\d+).*?', 'Hello 1234 World').group() # 结果为 'Hello 1234' re.match(r'^He.*?(\d+).*', 'Hello 1234 World').group() # 结果为 'Hello 1234 World'
修饰符
""" . 匹配任意非换行字符, re.S修饰符可以让 . 也匹配换行符 """ content = """Hello 123 4567 World_This is a Regex Demo""" re.match(r'^He.*?(\d+).*Demo$', content).group(1) # 报错 re.match(r'^He.*?(\d+).*Demo$', content, re.S).group(1) # '123'
修饰符 作用 re.I 使匹配对大小写不敏感 re.L 做本地化识别 re .M 多行匹配,影响^和$ re.S 使 . 匹配包括换行在内的所有字符 re.U 根据 Unicode 字符集解析字符 。 这个标志影响 \w 、\W 、\b 和\B re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解 常用的是 re.S 和 re.I
转义匹配
当要匹配与正则冲突的字符时, 用
\
转义 eg:
r'\(百度\)www\.baidu\.com'
此处()与.就需要转义 -
search()
""" re.match() # 匹配时,从头匹配 re.search() # 匹配时,扫换整个字符串,返回第一个匹配成功的结果,没有则返回None 注意: 用search()时, 加上修饰符 re.S """
-
findall()
""" re.findall() # 返回所有多个匹配结果, search只返回一个 返回值为一个元组 """
-
sub()
""" re.sub() # 修改文本 返回值为一个字符串 """ re.sub(r'\d+', '', 'hello 123 world 456') # 'hello world'
-
compile()
""" compile() # 将正则编译成正则表达式对象, 方便复用 """ pattern = re.compile('\d{2}:\d') result = re.match(pattern, '13:3')