我有一个问题,我可以说\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在这种情况下不起作用。?谢谢。!
答案 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+
\t
与第一个\s
匹配,但是当它击中第二个时,你的正则表达式会将它吐出来说&#34;哦,nope没关系。&#34;
你的第一个正则表达式是这样做的:
\s\s*
同样,\t
与您的第一个\s
匹配,当正则表达式继续时,它会发现它与第二个匹配,所以它需要&#34;高速路&# 34;而是跳过它。这就是\s\s*
匹配的原因,因为*
量词包括&#34;或零。&#34;虽然+
量词没有。
答案 3 :(得分:0)
不可能 \ s +表示一个或多个空格 但 \ t是出现一次的空白之一。
因此,\ s +包含\ t,反之亦然。