最近我正在编写一个Python程序,它有一个bug,我花了一个多小时来解决这个问题,最后发现正则表达式是问题,我不知道那里有{{1}在模式MUST
中,space
和m
之间不是n
,我将其写为M{m,n}
,代码无法执行。
我检查了http://docs.python.org/3/library/re.html关于M{m, n}
部分,但没有说您无法在{m,n}
和m
之间添加空格n
。这是为什么?还有其他文件没有提到的小事我应该知道正则表达式吗?
答案 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}
匹配。