Skip to main content
 首页 » 编程设计

python之有效的正则表达式

2025年05月04日23lonelyxmas

为了检查字符串是否是有效的正则表达式,我使用了以下代码:

import re 
 
try: 
    re.compile('(0*|2*)') 
    is_valid = True 
    print(is_valid) 
except re.error: 
    is_valid = False 
    print(is_valid) 

我的问题是 re.compile('(0*|2*)') 如何检查传入的字符串是否是有效的正则表达式。换句话说,它在幕后对字符串做了什么来检查它是否有效。我认为它正在做的可能是将字符串转换为列表,例如字符串 '(0*|2*)' 作为列表将是:

['(', '0', '*', '|', '2', '*', ')'] 

然后检查第一个和最后一个项目在组合时是否有效,以及它是否移至第二个项目和倒数第二个项目并重复该过程,但情况并非如此,因为它会在 * 处返回 false 2.

如果有人能解释该算法/它如何检查传入的字符串是否是伪代码方面的有效正则表达式,至少将不胜感激。

请您参考如下方法:

re.compile 命令解析字符串。您可以通过 re.DEBUG 标志看到它在做什么:

re.compile('(0*|2*)',re.DEBUG) 
subpattern 1 
  branch 
    max_repeat 0 65535 
      literal 48 
  or 
    max_repeat 0 65535 
      literal 50 
<_sre.SRE_Pattern object at 0x101b6b780> 

当您的表达式出现错误时,您将确切地看到是什么以及如何:

re.compile('(0*|2*\)',re.DEBUG) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 190, in compile 
    return _compile(pattern, flags) 
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 244, in _compile 
    raise error, v # invalid expression 
sre_constants.error: unbalanced parenthesis