0

我环顾四周,但无法找到这个问题的答案。

我试图从字符串中选择所有内容,除了重复一定次数的空格。我找到了一个选择空格的正则表达式,我希望的是一种简单的方法来获得与此完全相反的结果,但我还没有找到一种方法来做到这一点。如果这很重要,我最终将在 python 中实现它。

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

当前的正则表达式

测试字符串:

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

正则表达式:

[ ]{50,}
4

2 回答 2

1

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

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

查看正则表达式演示| Python 演示

例子

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'"]
于 2021-05-06T15:31:09.900 回答
1

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

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']
于 2021-05-06T15:22:04.607 回答