匹配水平空白的正则表达式

Regex to Match Horizontal White Spaces

我需要 Python2 中的正则表达式来匹配水平白色 space 而不是换行符。

\s 匹配所有白色space,包括换行符。

>>> re.sub(r"\s", "", "line 1.\nline 2\n")
'line1.line2'

\h 根本不起作用。

>>> re.sub(r"\h", "", "line 1.\nline 2\n")
'line 1.\nline 2\n'

[\t ] 有效,但我不确定我是否遗漏了其他可能的白色 space 字符,尤其是在 Unicode 中。比如\u00A0(不破space)或者\u200A(发space) .下面link处多了很多白space字:https://www.cs.tut.fi/~jkorpela/chars/spaces.html(死link)

>>> re.sub(r"[\t ]", "", u"line 1.\nline 2\n\u00A0\u200A\n", flags=re.UNICODE)
u'line1.\nline2\n\xa0\u200a\n'

你有什么建议吗?

如果您只想匹配实际的 spaces,请尝试使用普通的 ( )+(括号仅供阅读*)。如果你想匹配 spaces 和制表符,尝试 [ \t]+ (+ 这样你也可以匹配一个序列,例如 3 space 个字符。

现在 unicode 中实际上还有其他白色space 字符,这是事实。但是,您极不可能在书面代码中遇到任何这些字符,也不太可能在其他文本中遇到任何不太常见的白色 space 字符。

如果你愿意,你可以包含 \u00A0(不间断 space,在科学论文和一些网站上很常见。这是 HTML  ), en-space \u2002 ( ), em-space \u2003 ( ) or thin space \u2009 ( ).

您可以在 Wikipedia 上找到各种其他 unicode 白色 space 字符,但我非常怀疑是否有必要包括它们。我只是坚持使用 space、tab 和不间断的 space(即 [ \t\u00A0]+)。

无论如何,您打算与 \h 搭配什么?据我所知,它不是正则表达式中的有效 "symbol"。

*Whosebug 不会在内联代码

的边缘显示 spaces

我最终使用 [^\S\n] 而不是指定所有 Unicode 空格。

>>> re.sub(r"[^\S\n]", "", u"line 1.\nline 2\n\u00A0\u200A\n", flags=re.UNICODE)
u'line1.\nline2\n\n'

>>> re.sub(r"[\t ]", "", u"line 1.\nline 2\n\u00A0\u200A\n", flags=re.UNICODE)
u'line1.\nline2\n\xa0\u200a\n'

它按预期工作。

由于垂直白色 space 字符(行终止符)比水平字符少,因此将第一类列入黑名单比将第二类列入白名单要短。但是你仍然需要列出 a few more 而不仅仅是 \n:

[^\S\n\v\f\r\u2028\u2029]