为什么re.escape会转义空格

15

最近,我发现re.escape可以快速从字符串中获取正则表达式。当我传递类似于'a b c'的字符串时,我感到困惑,为什么每个空格都要用\字符转义。据我所知,编写一个等效的表达式来匹配该字符串,不需要转义空格字符。这种差异为什么会出现?谢谢。

1个回答

13

是的,因为它是明确的。空格可以字面匹配空格,但它也可以是一个详细正则表达式中的一部分,不被用于匹配。

我猜测生成的正则表达式是/a\ b\ c/,它非常明确地匹配在一个空格后跟随一个 a, 然后是一个单独的空格, 接着是 b, 再是一个单独的空格, 最后是一个 c。

如果您自己编写,也可以使用 /a\sb\sc/,这将匹配字母之间的任何空格。或者甚至:

r = re.compile(r"""a #match a
b #match b
c #match c
"""

这个正则表达式需要使用 re.VERBOSE 编译,这是一种在源代码中非常易读的编写正则表达式的方式。这个正则表达式会完全忽略空格,因此不会匹配您的情况。请记住,对于正则表达式,所有未显式说明的内容都有可能在某个星期天早上3点左右出现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接