ChatGPT解决这个技术问题 Extra ChatGPT

如何在一行中的单词之间搜索多个空格的出现

如何在一行中的单词之间搜索多个空格的出现

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

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

您是否要检查该行中的连续空格或所有空格?
连续的空格不是所有的空格
“单词之间”到底是什么意思?在您的两个示例中,单词和数字之间有多个空格。标点符号呢(例如,你想匹配一个点之后和下一个单词之前的多个空格)?一行中最后一个字符之前/之后的空格怎么办?你也想匹配标签吗?那些只包含空格的行呢?
“包含和 2”、“包含和 3”、“第一个和第二个”、“第二个和三个”之间的空格......是的,我想匹配一个点之后和下一个单词之前的空格。

A
Alex
[ ]{2,}

空间(2个或更多)

您还可以检查这些空格单词之前和之后是否跟随。 (不是其他空格,如制表符或换行符)

\w[ ]{2,}\w

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

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

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

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

\w 表示“单词字符”,即字母数字和下划线,但不是其他非空格字符。要检查非空格,请使用 \S(大写 S)。此外,第一个将仅匹配包含两个或多个空格的行,而没有其他内容。
我试图演变这个问题。我知道我错过了您在 \S 中所说的内容,我只是不想依赖字符大小写来实现此类功能,这样更易于阅读。
你为什么要使用锚?他正在寻找嵌入线条某处的空间。
\w[ ]{2,}\w 将无法匹配 word.<2 spaces>more words 或完全由空格组成的字符串。 [^\s]([ ]{2,})[^\s]\w 将在以空格或字符串开头的行(如 bla<2 spaces>.)上失败...
说明:1) {min,max} 运算符是 一般重复量词2) 省略 max离开逗号意味着无限重复。
t
tdammers

简单的解决方案:

/\s{2,}/

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

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

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

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

.* 通常是贪婪的,这意味着它将到达测试字符串的末尾,如果有强制字符,则后面的所有内容都不会匹配。通常在这种情况下,添加 ? 是一个很好的做法,例如 .*?。使用 PHP 的 PCRE 发生在我身上
它确实匹配。 “贪婪”意味着它尽可能匹配,同时仍然匹配整个模式。 /^.*b.*$/ 实际上匹配 "foobar",即使您希望第一个贪婪的 .* 已经匹配整个字符串。
O
Owen Yuwono

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

\s+

python中的示例

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

为什么是问题的答案?例如,如果一个人只想替换多个空格(使用制表符)或任何其他仅匹配多个空格的操作(根据原始问题),这将不起作用。
这将选择所有内容,而不仅仅是空格
T
Tim Pietzcker

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

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

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

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


more than one space between words in a line。单词之间的[ ]{2,}如何?你甚至读过这个问题吗?
这就是为什么我提到你的答案,以防 OP 真的想像他写的那样严格。也许我们应该问问他。
O
Ojitha

这是我的解决方案

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

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

20171106,16632 ESCG0000018SB

20171107,280 ESCG0000018SB

20171106,70476 ESCG0000018SB