如何在一行中的单词之间搜索一个以上的空格


109

如何在一行中的单词之间搜索一个以上的空格

1. this is a line containing  2 spaces
2. this is a line containing   3 spaces
3. this is a line containing multiple spaces first  second   three   four

以上所有都是此正则表达式的有效匹配项。我应该使用什么正则表达式?


您是否要检查连续的空格或该行中的所有空格?
Sachin Shanbhag 2010年

连续的空格不是所有空格
山姆2010年

1
您所说的“词间”到底是什么意思?在您的两个示例中,单词和数字之间有多个空格。标点符号如何处理(例如,您要在一个点之后和下一个单词之前匹配多个空格)?一行中最后一个字符之前/之后的空格怎么办?您是否也想匹配标签?那么除了空格之外什么都不包含的行呢?
Tim Pietzcker 2010年

“包含和2”,“包含和3”,“第一和第二”,“第二和三”之间的空格...是的,我想在一个点之后和下一个单词之前匹配空格。
山姆

Answers:


180
[ ]{2,}

空格(2个或更多)

您还可以检查这些空格前后是否有空格。(不是其他空格,例如制表符或换行符)

\w[ ]{2,}\w

相同,但是您也可以只选择(捕获)用于替换等任务的空间

\w([ ]{2,})\w

或看到空格前后都有什么,不仅是单词字符(空格除外)

[^\s]([ ]{2,})[^\s]

1
\w表示“单词字符”,即字母数字和下划线,但不包括其他非空格字符。要检查非空格,请使用\S(大写S)。同样,第一个将仅匹配包含两个或多个空格且没有其他内容的行。
tdammers 2010年

我试图解决这个问题。我知道我想念您说的话\S,我只是不希望依赖字符大小写来实现此功能,因此更易于阅读。
AlexanderMP 2010年

1
为什么要使用锚呢?他正在寻找嵌在线条中某处的空间。
Tim Pietzcker 2010年

没有特别的理由。起初我以为我需要它们,所以我将它们拖到了整个过程。实际上,在这种情况下使用它们是错误的,这是正确的。我将立即编辑我的答案。
AlexanderMP 2010年

1
\w[ ]{2,}\w将不匹配word.<2 spaces>more words或一个完全由空格组成的字符串。[^\s]([ ]{2,})[^\s]\w将在以空格或字符串开头的行上失败,例如bla<2 spaces>....
Tim Pietzcker 2010年

12

简单的解决方案:

/\s{2,}/

这匹配所有出现的一个或多个空白字符。如果您需要匹配整行,但前提是该行包含两个或多个连续的空格字符:

/^.*\s{2,}.*$/

如果空格不需要是连续的:

/^(.*\s.*){2,}$/

.*通常是贪婪的,这意味着它会到达测试字符串的结束,和所有的跟随,如果有强制性的特点,将不匹配。通常在这种情况下,添加?这样的好习惯.*?。它发生在我使用PHP的PCRE
AlexanderMP 2010年

它确实匹配。“贪婪”意味着它在尽可能匹配的同时仍匹配整个模式。/^.*b.*$/实际上匹配"foobar",即使您希望第一个贪婪的对象.*已经匹配整个字符串。
tdammers 2010年

9

此正则表达式选择所有空格,您可以使用此空格并将其替换为单个空格

\s+

python中的示例

result = re.sub('\s+',' ', data))

4

搜索[ ]{2,}。这将在行内的任何地方找到两个或更多相邻的空间。它还将匹配前导和尾随空格以及完全由空格组成的线条。如果您不想这样做,请查看亚历山大的答案。

实际上,您可以省去括号,只是为了清楚起见(否则,重复的空格字符不太明显:))。

问题\s{2,}在于它还会与Windows文件上的换行符匹配(其中换行符由表示CRLF\r\n由匹配)\s{2}

如果您还想查找多个制表符和空格,请使用[ \t]{2,}


more than one space between words in a line[ ]{2,}词间如何?你甚至读过这个问题吗?
亚历山大·MP

这就是为什么我提到您的答案的情况,以防OP真的想像他所写的那样严格。也许我们应该问他。
Tim Pietzcker 2010年

2

这是我的解决方案

[^0-9A-Z,\n]

这将删除所有数字,逗号和换行符,但选择中间空格,例如

  • 20171106,16632 ESCG0000018SB
  • 20171107,280 ESCG0000018SB
  • 20171106,70476 ESCG0000018SB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.