本节介绍python与正则表达式(regex)的分组
| | 匹配左右任意一个表达式 |
(ab) | 将括号中字符作为一个分组 |
\num | 引用分组num匹配到的字符串 |
(?P<name>) | 分组起别名 |
(?P=name) | 引用别名为name分组匹配到的字符串 |
分组表示的是,对选择多个列举字符的一组,例如xxx@163.com与xxx@qq.com,那么这里的163和qq就可以看成2组,要么163,要么qq
分组使用的符号是|,也就是编程中的”位或”运算符,表示选择其中一个。
使用|时,如果不指定范围,那么整个regex分成2组,所以通常我们指定从那分组,使用()指定,例如
re.match(r"xxx@(163|qq)\.com", xxx@qq.com)
分组后,一旦表达式匹配成功,就可以取出分组后的内容,假设上面re.match的返回值为result,则
result.group(1) # qq
在使用group函数时,指定num就可以取出指定分组的内容,1表示第一个分组,也就是从左到右第一个小括号()
这意味着,分组可以取出该分组的值,甚至在匹配中就能使用,例如<h1></h1>标签的匹配,对起始标签进行分组,那么我们就知道它是h1,在后续如果是/h1则说明配对,可以通过\num实现
re.match(r"<(\w*)>.*</\1>)", "<h1>abc</h1>"))
随着分组越来越多,简单使用()以及\num可能不太方便,于是可以给分组起别名(?P<name>),以及可以取代\num的别名引用(?P=name))