正则表达式重复的空间{m,n}

时间:2013-11-06 15:40:17

标签: python regex

最近我正在编写一个Python程序,它有一个bug,我花了一个多小时来解决这个问题,最后发现正则表达式是问题,我不知道那里有{{1}在模式MUST中,spacem之间不是n,我将其写为M{m,n},代码无法执行。

我检查了http://docs.python.org/3/library/re.html关于M{m, n}部分,但没有说您无法在{m,n}m之间添加空格n 。这是为什么?还有其他文件没有提到的小事我应该知道正则表达式吗?

3 个答案:

答案 0 :(得分:3)

你不会找到任何注意到这一点的文件,但这源于正则表达式的本质,因为正则表达式中的每个字符都有特殊含义,并且根据使用它的上下文可能有不同的含义。

这就是为什么有些版本支持通常称为Free Spacing Mode的标志,它允许您编写带空格的正则表达式,以提高可读性和可维护性,允许您在正则表达式中包含注释。

摘要:正则表达式中的每个字符和符号都很重要,所以不要放置一些东西,假设它没有任何意义或它会像那样传递。

答案 1 :(得分:0)

如果需要忽略空格,可以在使用正则表达式时使用详细选项,如下所述: http://docs.python.org/3/library/re.html?highlight=single%20line%20mode#re.VERBOSE

e.g。

re.compile(r"\d{3, 5}", re.X)

的处理方式与

相同

re.compile(r"\d{3,5}")

答案 2 :(得分:0)

这是正确的行为。范围量词({n,m}),如字符类([xyz]),被视为原子单位;自由间隔模式对它们没有影响。在字符类中,空格字符仍然与文字空间匹配,并且在范围量词中,它仍然是语法错误。例如,Java将{3, 5}视为语法错误,因为大括号不会被转义,但在Python中它与文字序列{3, 5}匹配。