为了检查字符串是否是有效的正则表达式,我使用以下代码:
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。
如果有人能够解释算法/它如何检查以查看传入的字符串是否是伪代码的有效正则表达式,至少应该非常感激。
答案 0 :(得分:1)
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