为什么在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()
']'
答案 0 :(得分:2)
左括号[
启动一个新的字符类,其范围在遇到第一个右括号时就结束 - ]
。
现在,考虑你的正则表达式:
[[]]
由第一个[
开始的角色类的范围,在第3个位置结束。所以,正则表达式只不过是[
(如在字符类中),后跟]
(最后一个字符)。所以,显然它与[
不匹配。
但是,一旦你逃脱了第一个]
,它就会失去关闭字符类的行为。所以,在下面的正则表达式中:
[[\]]
字符类仅由最后]
关闭。因此,正则表达式将匹配[
或]
。
注意:没有必要在字符类中转义[
,因为它没有特殊的行为。它无法在字符类中启动新的字符类,也无法关闭现有的字符类。