为什么\ g< 0>在re.sub中的行为与\ 0不同

时间:2014-01-09 19:03:24

标签: python regex

我正在使用Python 3.3

re.sub("(.)(.)",r"\2\1\g<0>","ab")  returns baab

BUT

re.sub("(.)(.)",r"\2\1\0","ab")  returns ba

这是sub方法中的错误还是由于某种原因sub方法无法识别\ 0?

2 个答案:

答案 0 :(得分:9)

作为written on this page\0被解释为空字符(\x00),组编号从Python开始为1(根据re模块文档):

  

\数目

     

匹配相同编号的组的内容。群组从1开始编号。例如,(.+) \1匹配''或'55 55',但不匹配'thethe'(注意组后面的空格)。此特殊序列只能用于匹配前99个组中的一个。 如果数字的第一个数字是0 ,或者数字是3个八进制数字长,它将不会被解释为组匹配,而是作为具有八进制数值的字符。在字符类的'['和']'内,所有数字转义都被视为字符。

此外,根据之前链接的页面,它不是一个错误,而是一个期望的行为(这很明显,因为它已被记录)。

答案 1 :(得分:1)

\0被解释为null \x00的转义符,re无法将其识别为捕获组。

<强>参考:

Python Standard Library documentation