为了检查字符串是否是有效的正则表达式,我使用了以下代码:
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
