正则表达式中的空格

时间:2014-04-22 16:16:16

标签: python regex

我有一个问题,我可以说\t等同于正则表达式中的\s+。 我有一些代码:

>>> b = '\tNadya Carson'
>>> c = re.compile(r'\s\s*')
>>> c
<_sre.SRE_Pattern object at 0x02729800>
>>> c.sub('',b)
'NadyaCarson'
>>> c = re.compile(r'\s\s+')
>>> c
<_sre.SRE_Pattern object at 0x027292F0>

这里有模式对象,但是当我想替换没有空格时,它仍然显示\ t而不是替换它:

>>> c.sub('',b)
'\tNadya Carson'

为什么属性sub在这种情况下不起作用。?谢谢。!

4 个答案:

答案 0 :(得分:4)

\t不等同于\s+,但\s+应与标签(\t)匹配。

您的示例中的问题是第二个模式\s\s+正在查找两个或更多的空白字符,而\t只是一个空白字符。

以下是一些可以帮助您理解的示例:

>>> result = re.match(r'\s\s+', '\t')
>>> print result
None
>>> result = re.match(r'\s\s+', '\t\t')
>>> print result
<_sre.SRE_Match object at 0x10ff228b8>

\s\s+也会匹配' \t''\n\t'' \n \t \t\n'

此外,\s\s*相当于\s+。两者都将匹配一个或多个空格字符。

答案 1 :(得分:2)

  

我可以说\ t在正则表达式中等于\ s +吗?

没有。

\t
  

匹配制表符

\s+

  

匹配“空格字符”(空格,制表符和换行符)   在一次和无限次之间,尽可能多次给予   根据需要回来(贪婪)«+»

答案 2 :(得分:2)

\s+不等同于\t,因为\s并不代表<space>,而是代表<whitespace>。文字空间(有时其中四个用于制表符,具体取决于用于显示它们的应用程序)只是。也就是说,击中空格键会创建一个文字空间。这并不奇怪。

\s\s永远不会与\t匹配,因为\t是空格,\s与之匹配。它将匹配\t\t,但那是因为有两个空白字符(两个制表符)。当你的正则表达式运行\s\s+时,它正在寻找一个空白字符,然后是一个,两个,三个,或者真正的任何数字。当它读取你的正则表达式时它会这样做:

\s\s+

Regular expression visualization

Debuggex Demo

\t与第一个\s匹配,但是当它击中第二个时,你的正则表达式会将它吐出来说&#34;哦,nope没关系。&#34;

你的第一个正则表达式是这样做的:

\s\s*

Regular expression visualization

Debuggex Demo

同样,\t与您的第一个\s匹配,当正则表达式继续时,它会发现它与第二个匹配,所以它需要&#34;高速路&# 34;而是跳过它。这就是\s\s*匹配的原因,因为*量词包括&#34;或零。&#34;虽然+量词没有。

答案 3 :(得分:0)

不可能 \ s +表示一个或多个空格 但 \ t是出现一次的空白之一。

因此,\ s +包含\ t,反之亦然。