Skip to main content
 首页 » 编程设计

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

2024年10月25日3152php

为什么在 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个位置结束。因此,正则表达式不过是 [(如在字符类中)后跟 ](最后一个字符)。所以,很明显它不会匹配 [.

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

[[\]] 

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

注意:没有必要在字符类中对 [ 进行转义,因为它在那里没有特殊行为。不能在字符类中启动新的字符类,也不能关闭已有的字符类。