为什么在 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()
']'
请您参考如下方法:
左括号 [ 开始一个新的字符类,其范围在遇到第一个右括号 - ] 时结束。
现在,考虑您的正则表达式:
[[]]
字符类的范围从第一个[开始,到第3个位置结束。因此,正则表达式不过是 [(如在字符类中)后跟 ](最后一个字符)。所以,很明显它不会匹配 [.
但是,一旦您转义了第一个 ],它就失去了关闭字符类的行为。所以,在下面的正则表达式中:
[[\]]
字符类仅由最后一个 ] 关闭。因此,正则表达式将匹配 [ 或 ]。
注意:没有必要在字符类中对 [ 进行转义,因为它在那里没有特殊行为。不能在字符类中启动新的字符类,也不能关闭已有的字符类。
