字符串类中的Python正则表达式引擎转义括号

时间:2015-04-30 17:09:00

标签: python regex python-2.7 python-3.x

为什么在python中如果我们在字符类中使用2个括号而不匹配[]而不是][

>>> re.search(r'[[]]','[]').group()
'[]'
>>> re.search(r'[[]]','[').group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

但如果我们逃脱它们,它将按预期工作:

>>> re.search(r'[\[\]]','[').group()
'['
>>> re.search(r'[\[\]]',']').group()
']'

1 个答案:

答案 0 :(得分:2)

左括号[启动一个新的字符类,其范围在遇到第一个右括号时就结束 - ]

现在,考虑你的正则表达式:

[[]]

由第一个[开始的角色类的范围,在第3个位置结束。所以,正则表达式只不过是[(如在字符类中),后跟](最后一个字符)。所以,显然它与[不匹配。

但是,一旦你逃脱了第一个],它就会失去关闭字符类的行为。所以,在下面的正则表达式中:

[[\]]

字符类仅由最后]关闭。因此,正则表达式将匹配[]

注意:没有必要在字符类中转义[,因为它没有特殊的行为。它无法在字符类中启动新的字符类,也无法关闭现有的字符类。