正则表达式 - 修饰符
正则表达式可以包含一些标志修饰符来控制匹配模式, 用在正则表达式处理函数中的 flag 参数中, 为可选参数.
(1) re.I 全写 (re.IGNORECASE)
表示使匹配时, 忽略大小
(2) re.M 全写 (re.MULTILINE)
多行匹配, 影响 ^ 和 $ 的行为
(3) re.S 全写 (re.DOTALL)
使点 (.) 匹配包括换行在内的所有字符
(4) re.X 全写 (re.VERBOSE)
这个模式下正则表达式可以是多行, 忽略空白字符, 并可以加入注释.
(5) 除以上标志外还有 re.L 和 re.U, 但不常用
(6) 可以通过使用运算符 "|" 来指定多个标志, 表示同时生效.
如: re.I | re.M 被设置成 I 和 M 标志,
- content = 'My username is zeke999!'
- re.search(r'zeke\d{3}', content, re.I | re.M)
Match 对象的属性
(1)string 属性:
获取匹配时使用的字符串对象
- >>> m = re.match(r'\d+','456abc')
- >>> m.string
- '456abc'
(2)re 属性:
匹配时使用的 pattern 对象, 也就是匹配到内容的正则表达 式对象
- >>> m
- <_sre.SRE_Match object at 0x02C8FA68>
- >>> m.re
- <_sre.SRE_Pattern object at 0x02D4ECD0>
(3)pos 属性:
该属性表示文本中正则表达式开始搜索的索引. 值与 Pattern.match() 和 Pattern.seach() 方法中的同名参数相同
>>> m.pos
0
(4)endpos 属性:
该属性表示文本中正则表达式结束搜索的索引. 值与 Pattern.match() 和 Pattern.seach() 方法中的同名参数相同
>>> m.endpos
6
(5)lastindex 属性:
该属性表示最后一个被捕获的分组在文本中的索引. 如果没有被捕获的分组, 将为 None
- >>> m = re.match(r'a(b)(c)d','abcdef')
- >>> m.lastindex
- 2
(6)lastgroup 属性:
该属性表示最后一个被捕获的分组别名. 如果这个分 组没有别名或者没有被捕获的分组, 将为 None.
(7)group([group1, ...]):
获得一个或多个分组截获的字符串; 指定多个参数时将以元组形式返回. group1 可以使用编 号也可以使用别名; 编号 0 代表匹配的整个子串; 默认返回 group(0)
实例: group 函数传多个参数
- p = re.compile('(a(b)c)d')
- m = p.match('abcd')
- resTup = m.group(1,2,1)
- print resTup
- >>>('abc', 'b', 'abc')
- (8)groups([default=None])
以元组形式返回全部分组截获的字符串. 相当于调用 group(1,2,...last)
(9)start([group=0])
返回指定的组截获的子串在 string 中的起始索引 (子串第一个字符的索引). 默认为第 0 组, 即整个字符串
(10)end([group=0])
返回指定的组截获的子串在 string 中的结束索引 (子串最后一个字符的索引).group 默认值 为 0, 即整个字符串
(11)span([group])
该方法表示以元组的形式返回 (start(group), end(group)), 即某个分组的匹配文字内容在被 匹配字符串的开始索引位置和结束索引位置
(12)expand(template)
将匹配到的分组代入 template 中然后返回. template 中可以使用 \ id 或 \ g<id>,\g<name> 引用分组, 但不能使用编号 0.\id 与 \ g<id> 是等价的; 但 \ 10 将被认为是第 10 个分组, 如果 你想表达 \ 1 之后是字符'0', 只能使用 \ g<1>0.
- m = re.search(r'(\w+)! (\w+) (\w+)','HMan! How finny!') #将匹配的结果带入 print m.expand(r'resut:\3 \2 \1')
- >>> resut:finny How HMan
- (13)groupdict([default=None])
该函数的作用是, 将所有匹配到并且指定了别名的分组, 以别名为 key, 匹配到的字串为 value, 存于字典中, 然后返回这个字典. 如果表达式中未设置别名分组, 就会返回一个空字典
- >>> m = re.search(r'(?P\d+)(\w+)','78fd')
- >>> m.groupdict()
- {'num': '78'}
来源: http://www.bubuko.com/infodetail-2755815.html