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

2024-04-26 13:10:59 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我在写一个Python程序,它有一个bug,我花了一个多小时来解决这个问题,最后发现正则表达式是个问题,我不知道在模式m和{}之间没有{},代码不能执行。在

我检查了http://docs.python.org/3/library/re.html关于{m,n}的部分,它没有说你不能在m和{}之间放置空格。为什么?关于正则表达式,有没有其他一些文档没有提到的,我应该知道的?在


Tags: 代码文档org程序rehttpdocshtml
3条回答

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

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

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

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

如果需要忽略空白,可以在使用regex时使用verbose选项,如下所述: 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}")

相关问题 更多 >