有效的正则表达式

时间:2014-03-12 21:54:55

标签: python regex

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

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。

如果有人能够解释算法/它如何检查以查看传入的字符串是否是伪代码的有效正则表达式,至少应该非常感激。

1 个答案:

答案 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