Регулярное выражение для соответствия более чем 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,} Скобки в регулярном выражении - это класс символов. Имеется в виду только символы там. Здесь просто космос. Следующая фигурная скобка означает два или более раза.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.