正则表达式中的空格

Tir*_*tha 7 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>
Run Code Online (Sandbox Code Playgroud)

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

>>> c.sub('',b)
'\tNadya Carson'
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*ith 7

\s+不等于\tbecause\s不意味着<space>,而是意味着<whitespace>。文字空间(有时四个用于选项卡,具体取决于用于显示它们的应用程序)就是简单的。也就是说,点击空格键会创建一个文字空间。这并不奇怪。

\s\s永远不会匹配 a\t因为因为\tIS 是空白,所以\s匹配它。它将匹配\t\t,但那是因为有两个空格字符(都是制表符)。当你的正则表达式运行时\s\s+,它会寻找一个空格字符,后跟一个、两个、三个或任何数量的空格。当它读取您的正则表达式时,它会执行以下操作:

\s\s+
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

调试演示

匹配\t第一个\s,但是当它遇到第二个时,你的正则表达式会吐出它,说“哦,不,没关系。”

您的第一个正则表达式执行此操作:

\s\s*
Run Code Online (Sandbox Code Playgroud)

正则表达式可视化

调试演示

再次,\t匹配您的第一个\s,当正则表达式继续时,它发现它与第二个 \s 不匹配,因此它采取“高路”并跳过它。这就是\s\s*匹配的原因,因为*量词包括“或零”。而+量词则不然。


Rob*_*tts 6

\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>
Run Code Online (Sandbox Code Playgroud)

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

另外,\s\s*等效于\s+。两者都将匹配一个或多个空格字符。


Ped*_*ito 5

\n

我可以说 \\t 相当于正则表达式中的 \\s+ 吗?

\n
\n\n

不。

\n\n
\\t\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

匹配制表符

\n
\n\n

\\s+

\n\n
\n

匹配 \xe2\x80\x9c 空白字符\xe2\x80\x9d(空格、制表符和换行符)\n 一次到无限次之间,尽可能多次,根据需要返回\n(贪婪)\xc2\ xab+\xc2\xbb

\n
\n