Регулярное выражение для соответствия более чем 2 пробелам, но не новой строке
87
Я хочу заменить все более двух пробелов в строке, но не новые строки, у меня есть это регулярное выражение: \s{2,}но оно также соответствует новым строкам.
Как сопоставить только 2 или более пробелов, а не новые строки?
@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,} Скобки в регулярном выражении - это класс символов. Имеется в виду только символы там. Здесь просто космос. Следующая фигурная скобка означает два или более раза.
Ответы:
Поместите символы пробела, которые вы хотите сопоставить, внутри класса символов. Например:
[ \t]{2,}
соответствует 2 или более пробелам или табуляциям.
Вы также можете:
[^\S\r\n]{2,}
который соответствует любому символу с пробелом, кроме
\r
и\n
как минимум дважды (обратите внимание, что заглавная букваS
in\S
является сокращением от[^\s]
).источник
\s{2,}
захватывает новые строки? Если бы это было так,\n\s{2,}
я бы понял. И почему ввод буквального пробела в скобках работает?\s
соответствует пробелам, табуляциям и переносам строк. «И почему ввод буквального пробела в скобках работает?», Ну, ошибаюсь, потому что это так. Не знаю, что еще сказать об этом :)Регулярное выражение предназначено только для двух пробелов: [] {2,} Скобки в регулярном выражении - это класс символов. Имеется в виду только символы там. Здесь просто космос. Следующая фигурная скобка означает два или более раза.
источник