最近在写一个Python程序,有个bug,花了一个多小时解决这个问题,最后发现是正则表达式的问题,不知道pattern里面MUST
没有space
between m
and我把它写成,代码无法执行。n
M{m,n}
M{m, n}
我检查了http://docs.python.org/3/library/re.html关于该部分的信息,它并{m,n}
没有说你不能在. 这是为什么?还有其他文件没有提到的小事情,我应该知道正则表达式吗?m
n
{m,n}
最近在写一个Python程序,有个bug,花了一个多小时解决这个问题,最后发现是正则表达式的问题,不知道pattern里面MUST
没有space
between m
and我把它写成,代码无法执行。n
M{m,n}
M{m, n}
我检查了http://docs.python.org/3/library/re.html关于该部分的信息,它并{m,n}
没有说你不能在. 这是为什么?还有其他文件没有提到的小事情,我应该知道正则表达式吗?m
n
{m,n}
您不会找到任何文档注意到这一点,但这源于正则表达式的性质,因为正则表达式中的每个字符都有特殊含义,并且根据使用它的上下文可能具有不同的含义。
这就是为什么一些风格支持通常称为Free Spacing Mode的标志,它允许您编写带有空格的正则表达式,以通过允许您在正则表达式本身中包含注释来提高可读性和可维护性。
总结:正则表达式中的每个字符和符号都很重要,所以不要假设它没有任何意义,或者它会像那样传递。
如果您需要忽略空格,则可以在使用正则表达式时使用详细选项,如下所述: http ://docs.python.org/3/library/re.html?highlight=single%20line%20mode#re.VERBOSE
例如
re.compile(r"\d{3, 5}", re.X)
被同等对待
re.compile(r"\d{3,5}")
这是正确的行为。范围量词 ( {n,m}
) 与字符类 ( [xyz]
) 一样,被视为原子单位;自由间距模式对它们没有影响。在字符类中,空格字符仍然与文字空格匹配,而在范围量词中,它仍然是语法错误。例如,Java 将{3, 5}
大括号视为语法错误,因为大括号没有被转义,但在 Python 中它匹配文字序列{3, 5}
。