一个正则表达式捕获由一个 space-字符分隔的单词,并结合相反的捕获出现超过一个 space-字符

One regex to capture words separated by one space-character in combination with the opposite capture occurrences more than one space-character

我希望只有一个正则表达式来捕获由一个 space-字符分隔的单词,并结合相反的捕获出现超过一个 space-字符

我想涵盖以下示例:

This line with     sometimes more than    1  space needs to be captured in 3 matches with 2 groups.

我希望有以下群体:

([This line with][     ])([sometimes more than][    ])([1][  ])space needs to be captured in 3 matches with 2 groups.

两者取其一是没问题的。 IE。 捕获多个 space-char:

([\s]{2,})

并捕获仅由一个 space-char 分隔的单词(参见 ):

\S+(?:\s\S+)*

您可以使用 alternation 来匹配一个单词后跟单个 space 的重复模式和一个单词或匹配 2 个或更多 spaces

\S+(?: \S+)*| {2,}

说明

  • \S+ 匹配 1+ 个非白色space 个字符
  • (?: \S+)* 重复 0+ 次匹配 space 和 1+ 非白色 space 字符
  • |
  • {2,} 重复匹配一个 space
  • 2 次或更多次

Regex demo

如果您想匹配白色 space 字符,您可以将 space 替换为 \s 但请注意,它也可能匹配换行符。

编辑

对于更新后的问题,您可以使用 2 个捕获组:

(\S+(?: \S+)*)( {2,})

说明

  • ( 捕获 组 1
    • \S+ 匹配 1+ 个非白色space 个字符
    • (?: \S+)* 重复 0+ 次匹配 space 和 1+ 非白色 space 字符
  • ) 关闭组 1
  • ( 捕获 第 2 组
    • {2,} 匹配 2 个或更多 spaces
  • ) 关闭组 2

Regex demo