在python3中,我如何精确匹配空白字符而不是换行符\ n或tab \ t?
我已经看到了来自Regex match space not \n的\s+[^\n]
回答,但是对于以下示例,它不起作用:
a='rasd\nsa sd'
print(re.search(r'\s+[^ \n]',a))
结果是<_sre.SRE_Match object; span=(4, 6), match='\ns'>
,这是匹配的换行符。
答案 0 :(得分:12)
不需要特殊群体。只需创建一个带空格字符的正则表达式。空格字符没有任何特殊含义,它只是意味着匹配空格&#34;。
RE = re.compile(' +')
所以你的情况
a='rasd\nsa sd'
print(re.search(' +', a))
会给出
<_sre.SRE_Match object; span=(7, 8), match=' '>
答案 1 :(得分:8)
如果要匹配除换行符和选项卡之外的一个或多个空白字符,请使用
r"[^\S\n\t]+"
[^\S]
匹配任何不是非空格的字符=任何空白字符。但是,由于字符类是否定的,当您向其添加字符时,它们将被排除在匹配之外。
import re
a='rasd\nsa sd'
print(re.findall(r'[^\S\n\t]+',a))
# => [' ']
更多注意事项:\s
matches [ \t\n\r\f\v]
如果使用ASCII标志。因此,如果您计划仅匹配ASCII,您也可以使用[ \r\f\v]
来排除所需的字符。如果您需要使用Unicode字符串,上面的解决方案是可行的。