正则表达式反转选择

Regex invert selection

我环顾了一下周围,但找不到这个问题的答案。

我正在尝试 select 字符串中的所有内容 除了 重复一定次数的空格。我找到了 select 空格的正则表达式,我希望的是一种简单的方法来得到它的精确逆,但我还没有找到一种方法来做到这一点。如果重要的话,我最终会在 python 中实现它。

下面是我的测试字符串、当前正则表达式和 link 我正在使用的正则表达式测试站点。

Current regex

测试字符串:

'All: Day and Night                                                                                                                                                                                                                                             Vulnerabilities\Personnel vulnerabilities\Outdoor vulnerability                                                                                                                                                                                                1E-09                                                                                                                                                                                                                                                          /AvgeYear                                                                                                                                                                                                                                                      \x1a'

正则表达式:

[ ]{50,}

您可以使用相同的正则表达式,并且只 re.sub 匹配单个 space。

re.sub(r'[ ]{50,}', ' ', string)
#'All: Day and Night Vulnerabilities\Personnel vulnerabilities\Outdoor vulnerability 1E-09 /AvgeYear \x1a'

如果你想要它作为一个列表,只需使用相同的正则表达式并使用 re.split() 而不是 re.sub()

re.split(r'[ ]{50,}', string)
#['All: Day and Night', 'Vulnerabilities\Personnel vulnerabilities\Outdoor vulnerability', '1E-09', '/AvgeYear', '\x1a']

您可以匹配 1+ 个非空白字符,并可选择重复 1-49 个空格和 1+ 个非空白字符。

\S+(?:[ ]{1,49}\S+)*

看到一个regex demo | Python demo

例子

from pprint import pprint
import re

regex = r"\S+(?:[ ]{1,49}\S+)*"
s = "All: Day and Night                                                                                                                                                                                                                                             Vulnerabilities\\Personnel vulnerabilities\\Outdoor vulnerability                                                                                                                                                                                                1E-09                                                                                                                                                                                                                                                          /AvgeYear                                                                                                                                                                                                                                                      \x1a'"

pprint(re.findall(regex, s))

输出

['All: Day and Night',
 'Vulnerabilities\\Personnel vulnerabilities\\Outdoor vulnerability',
 '1E-09',
 '/AvgeYear',
 "\x1a'"]