Python正则表达式只匹配空间

Dim*_*try 12 python regex

在python3中,如何精确匹配空白字符而不是换行符\n或tab\t?

我已经看到Regex匹配空间\s+[^\n]答案 不是答案,但对于以下示例它不起作用:

a='rasd\nsa sd'
print(re.search(r'\s+[^ \n]',a))
Run Code Online (Sandbox Code Playgroud)

结果是<_sre.SRE_Match object; span=(4, 6), match='\ns'>,匹配的换行符.

Res*_*nce 15

不需要特殊团体.只需创建一个带空格字符的正则表达式.空格字符没有任何特殊含义,它只是意味着"匹配空间".

RE = re.compile(' +')
Run Code Online (Sandbox Code Playgroud)

所以对你的情况

a='rasd\nsa sd'
print(re.search(' +', a))
Run Code Online (Sandbox Code Playgroud)

会给

<_sre.SRE_Match object; span=(7, 8), match=' '>
Run Code Online (Sandbox Code Playgroud)


Wik*_*żew 9

如果要匹配1个或多个空格字符,除了换行符和选项卡使用

r"[^\S\n\t]+"
Run Code Online (Sandbox Code Playgroud)

[^\S]匹配不是非空白任何字符=任何字符是空格.但是,由于字符类是否定的,当您向其添加字符时,它们将被排除在匹配之外.

Python演示:

import re
a='rasd\nsa sd'
print(re.findall(r'[^\S\n\t]+',a))
# => [' ']
Run Code Online (Sandbox Code Playgroud)

更多注意事项:如果使用ASCII标志,则\s匹配[ \t\n\r\f\v].因此,如果您计划仅匹配ASCII,您也可以使用它[ \r\f\v]来排除所需的字符.如果您需要使用Unicode字符串,上面的解决方案是可行的.