正则表达式匹配超过 2 个空格但不匹配新行

Posted

技术标签:

【中文标题】正则表达式匹配超过 2 个空格但不匹配新行【英文标题】:Regex to match more than 2 white spaces but not new line 【发布时间】:2011-08-02 09:07:46 【问题描述】:

我想替换字符串中所有超过 2 个空格但不是新行,我有这个正则表达式:\s2, 但它也匹配新行。

如何只匹配 2 个或更多空格而不匹配新行?

我正在使用 c#

【问题讨论】:

@nihcap - 实际上,C# 没有自己的正则表达式风格,它是 .Net 公共库的一部分。在这种情况下,.Net 和 C# 都是有用的标签。 【参考方案1】:

将要匹配的空白字符放入字符类中。例如:

[ \t]2,

匹配 2 个或更多空格或制表符。

你也可以这样做:

[^\S\r\n]2,

匹配除\r\n 之外的任何空白字符至少两次(注意\S 中的大写S[^\s] 的缩写)。

【讨论】:

最后一句话中的“缩写”是什么意思?如果没有这个速记,整个正则表达式会是什么样子? @LonnieBest 在正则表达式中,对于转义序列如 \w,通常约定大写转义序列是小写转义序列的反字符集。例如。 \d 是 \D 的倒数,\s 是 \S 的倒数,\w 是 \W 的倒数,等等。此外,在由 [ ] 分隔的字符类集中,例如 [abc],可以指定一个倒数使用 [^abc]。因此,\S 等价于 [^\s],如果允许的话,它也等价于不允许的符号 [^^\S]。 (^^ 不是表示逆的有效方式。) @DejayClayton 谢谢,我不知道。 这个答案有效,但为什么\s2, 抓住换行符继续它?如果是\n\s2, 我会理解的。为什么在括号中输入文字空格会起作用? “这个答案有效,但为什么 \s2, 会抓住换行符继续它?”因为\s 匹配空格、制表符和换行符。 “为什么在括号中输入文字空格会起作用?”,嗯,错误,因为它确实如此。不知道还能说什么:)【参考方案2】:

正则表达式只针对两个空格: []2, 正则表达式中的括号是字符类。意思只是那里的字符。这里只是空间。下面的大括号表示两次或多次。

【讨论】:

以上是关于正则表达式匹配超过 2 个空格但不匹配新行的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式删除新行和空格

正则表达式怎么匹配空格

无法使用 Java 正则表达式匹配字符串的最后部分 [重复]

正则表达式匹配一段里的第一个空格?

正则表达式与新行之间的内容不匹配 (\r\n)

正则表达式 - 在第 n 个空格之间匹配数据并在第 n 个空格处停止