Регулярное выражение для соответствия более чем 2 пробелам, но не новой строке

87

Я хочу заменить все более двух пробелов в строке, но не новые строки, у меня есть это регулярное выражение: \s{2,}но оно также соответствует новым строкам.

Как сопоставить только 2 или более пробелов, а не новые строки?

Я использую c #

Бруно
источник
@nihcap - На самом деле, C # не имеет собственного аромата регулярных выражений, он является частью общей библиотеки .Net. В этом случае полезными тегами являются .Net и C #.
Коби

Ответы:

159

Поместите символы пробела, которые вы хотите сопоставить, внутри класса символов. Например:

[ \t]{2,}

соответствует 2 или более пробелам или табуляциям.

Вы также можете:

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

который соответствует любому символу с пробелом, кроме \rи \nкак минимум дважды (обратите внимание, что заглавная буква Sin \Sявляется сокращением от [^\s]).

Барт Кирс
источник
Что вы имеете в виду под словом «сокращенно» в своем последнем предложении? Как бы выглядело все регулярное выражение без этого сокращения?
Лонни Бест
5
@LonnieBest в регулярных выражениях для экранированных последовательностей, таких как \ w, часто принято соглашение, что escape-последовательность в верхнем регистре является набором символов, обратным escape-последовательностям в нижнем регистре. Например, \ d обратен \ D, \ s обратен \ S, \ w обратен \ W и т. Д. Кроме того, в наборе классов символов, разделенном [], например [abc], можно указать обратное использование [^ abc]. Таким образом, \ S эквивалентен [^ \ s], что также было бы эквивалентно запрещенной записи [^^ \ S], если бы это было разрешено. (^^ не является допустимым способом представления обратного к обратному.)
Дежей Клейтон
@DejayClayton Спасибо, я этого не знал.
Lonnie Best
Этот ответ сработал, но почему \s{2,}захватывает новые строки? Если бы это было так, \n\s{2,}я бы понял. И почему ввод буквального пробела в скобках работает?
bit-less
"Этот ответ сработал, но почему \ s {2,} захватывает новые строки при его выполнении?" потому что \sсоответствует пробелам, табуляциям и переносам строк. «И почему ввод буквального пробела в скобках работает?», Ну, ошибаюсь, потому что это так. Не знаю, что еще сказать об этом :)
Барт Кирс
0

Регулярное выражение предназначено только для двух пробелов: [] {2,} Скобки в регулярном выражении - это класс символов. Имеется в виду только символы там. Здесь просто космос. Следующая фигурная скобка означает два или более раза.

Йохан
источник