2.7的手册中的解释:
(?P<name>...)
Similar to regular parentheses, but the substring matched by the group is accessible within the rest of the regular expression via the symbolic group name name. Group names must be valid identifiers, and each group name must be defined only once within a regular expression. A symbolic group is also a numbered group, just as if the group were not named. So the group named id in the example below can also be referenced as the numbered group 1.
For example, if the pattern is (?P<id>[a-zA-Z_]\w*), the group can be referenced by its name in arguments to methods of match objects, such asm.group('id') or m.end('id'), and also by name in the regular expression itself (using (?P=id)) and replacement text given to .sub() (using \g<id>).
此处详细解释一下上述原文的意思:
声明:此处尽量称 group为“group”,而不翻译为 汉字的“组”,以便容易理解和去强化group本身的组的含义。
1.此处的(?P<name>…),和普通的(?…):
基本类似。区别在于,此处由于是给此group命名了,所以,后续(同一正则表达式内和搜索后得到的Match对象中),都可以通过此group的名字而去引用此group。
2. group的名字,当前需要是正常的Python标识符,即字母,数字,下划线等,即,没有特殊的字符。
3.同一正则表达式内,每个group的组名,是唯一的,不能重复。
4. 虽然此处group内命名了,但是其仍然和普通的
中一样,可以通过索引号,即group(1),group(2)等等,去引用对应的group的。
很明显,按照正则内被命名的group的顺序,依次地
group(1)==group(name1)
group(2)==group(name2)
….
下面就整理出示例代码,用于演示,named group的用法,其中也包括了,相对要复杂一点的:
(1)命了名的group,在当前的正则表达式中,后续被(?P=name)的方式引用;
其中,详细注意事项,可参考:
(2)re.sub()中后续通过\g<name>方式被引用。
示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
【总结】
1. 一般多数是通过matched.group(name)的方式去获得对应所查找到的字符串的。
2. 关于匹配之前已经出现的字符串,可以使用:
(1)在re.search等中,使用(?P=name);
(2)在re.sub的被替换的字符串中,使用\g<name>的方式获得之前已命名的group的值;