re.compile 函数
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法:
re.compile(pattern[, flags])
参数:
-
pattern : 一个字符串形式的正则表达式
-
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
- re.I 忽略大小写
- re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境
- re.M 多行模式
- re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
- re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库
- re.X 为了增加可读性,忽略空格和 # 后面的注释
1 # coding=utf-8 2 import re 3 import logging 4 5 s = 'A1B2C55' 6 # 用于匹配最少一位数字 7 pattern = re.compile(r'd+') 8 # match 从头开始匹配 9 w = pattern.match(s) 10 logging.warning(w) 11 12 # 从 B 开始匹配 13 w = pattern.match(s, 2, 10) 14 logging.warning(w) 15 16 # 从 2 开始匹配 17 w = pattern.match(s, 3, 10) 18 logging.warning(w) 19 20 logging.warning(w.group()) 21 logging.warning(w.start()) 22 logging.warning(w.end()) 23 logging.warning(w.span())
输出结果:
WARNING:root:None WARNING:root:None WARNING:root:<_sre.SRE_Match object at 0x7fd93b5dab90> WARNING:root:2 WARNING:root:3 WARNING:root:4 WARNING:root:(3, 4)
在上面,当匹配成功时返回一个 Match 对象,其中:
group([group1, …])
方法用于获得一个或多个分组匹配的字符串,当要获得整个匹配的子串时,可直接使用group()
或group(0)
;start([group])
方法用于获取分组匹配的子串在整个字符串中的起始位置(子串第一个字符的索引),参数默认值为 0;end([group])
方法用于获取分组匹配的子串在整个字符串中的结束位置(子串最后一个字符的索引+1),参数默认值为 0;span([group])
方法返回(start(group), end(group))
。
1 # coding=utf-8 2 import re 3 import logging 4 5 s = 'Hello Python Hello World' 6 pattern = re.compile(r'([a-z]+) ([a-z]+)', re.I) 7 # match 从头开始匹配 8 w = pattern.match(s) 9 # 打印结果 10 logging.warning(w) 11 # 返回成功的字符串 12 logging.warning(w.group()) 13 # 返回第一个分组匹配到的子串 14 logging.warning(w.group(1)) 15 # 返回第二个分组匹配到的子串 16 logging.warning(w.group(2)) 17 # 返回第一个分组匹配到的子串索引 18 logging.warning(w.span(1)) 19 # 返回第二个分组匹配到的子串索引 20 logging.warning(w.span(2)) 21 # 等价于 (w.group(1), w.group(2), ...) 22 logging.warning(w.groups()) 23 # 不存在第三个 会报错 24 logging.warning(w.group(3))
输出结果:
WARNING:root:<_sre.SRE_Match object at 0x7f62f0583cf0> WARNING:root:Hello Python WARNING:root:Hello WARNING:root:Python WARNING:root:(0, 5) WARNING:root:(6, 12) WARNING:root:('Hello', 'Python') Traceback (most recent call last): File "test_word.py", line 17, in <module> logging.warning(w.group(3)) IndexError: no such group