【问题标题】:Python regex match space only仅 Python 正则表达式匹配空间
【发布时间】:2016-11-04 20:54:32
【问题描述】:

在 python3 中,如何准确匹配空白字符而不是换行符 \n 或制表符 \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'>,这是匹配的换行符。

【问题讨论】:

  • 顺便说一句,您提供的 r'\s+[^ \n]' 甚至不是一个可接受的答案,Python re 不支持像 [[:blank:]] 这样的 POSIX 字符类

标签: python regex


【解决方案1】:

不需要特殊的群体。只需创建一个带有空格字符的正则表达式。空格字符没有任何特殊含义,只是表示“匹配一个空格”。

RE = re.compile(' +')

所以对于你的情况

a='rasd\nsa sd'
print(re.search(' +', a))

会给

<_sre.SRE_Match object; span=(7, 8), match=' '>

【讨论】:

  • 是的,事实证明是这样的,我只是希望它有独立的转义序列,就像其他空格一样。
  • lmao,有趣的是有些人将问题过度复杂化。
【解决方案2】:

如果您想匹配除换行符和制表符之外的 1 个或多个空白字符,请使用

r"[^\S\n\t]+"

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

Python demo:

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 字符串,上面的解决方案是一个可行的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-27
    • 2013-08-08
    • 2016-07-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多