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


87

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

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

我正在使用C#


@nihcap-实际上,C#没有自己的正则表达式,它是.Net公共库的一部分。在这种情况下,.Net和C#都是有用的标记。
科比

Answers:


159

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

[ \t]{2,}

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

您也可以这样做:

[^\S\r\n]{2,}

匹配任何空格字符,除了\r\n至少两次(请注意,Sin的大写\S字母缩写[^\s])。


您在最后一句话中的“缩写”是什么意思?没有这个速记,整个正则表达式会是什么样?
Lonnie Best

5
@LonnieBest在正则表达式中最好,对于\ w这样的转义序列,通常约定大写转义序列是小写转义序列的反字符集。例如,\ d是\ D的逆,\ s是\ S的逆,\ w是\ W的逆,等等。而且,在由[]分隔的字符类集中,例如[abc],可以指定一个使用[^ abc]反演。因此,\ S等效于[^ \ s],如果允许,它也等效于不允许的符号[^^ \ S]。(^^不是表示逆的有效方法。)
Dejay Clayton

@DejayClayton谢谢,我不知道。
朗尼·贝斯特

这个答案有效,但是为什么要\s{2,}抓住换行符呢?如果是的话,\n\s{2,}我会明白的。为什么在方括号中输入文字空间有效?
位少

“此答案有效,但是为什么\ s {2,}抢换行符呢?” 因为\s匹配空格,制表符和换行符。“为什么在括号中输入文字空间有效呢?”,嗯,因为它可以。不知道该说些什么:)
Bart Kiers

0

正则表达式仅定位两个空格:[] {2,}正则表达式中的方括号是字符类。意思就是里面的字符。这里只是空间。以下花括号表示两次或多次。

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.