Regex, aby dopasować więcej niż 2 białe spacje, ale nie nową linię

90

Chcę zamienić wszystkie więcej niż 2 białe spacje w ciągu, ale nie nowe wiersze, mam to wyrażenie regularne: \s{2,}ale pasuje również do nowych wierszy.

Jak mogę dopasować tylko 2 lub więcej białych spacji, a nie nowe linie?

Używam c #

Bruno
źródło
@nihcap - Właściwie C # nie ma własnego stylu regex, jest częścią wspólnej biblioteki .Net. W tym przypadku przydatnymi tagami są oba .Net i C #.
Kobi

Odpowiedzi:

164

Umieść znaki spacji, które chcesz dopasować, wewnątrz klasy znaków. Na przykład:

[ \t]{2,}

dopasowuje 2 lub więcej spacji lub tabulatorów.

Możesz też:

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

który pasuje do każdego white-space char wyjątkiem \ri \nco najmniej dwa razy (zauważ, że kapitał Sw \Sto skrót [^\s]).

Bart Kiers
źródło
Co masz na myśli, mówiąc „skrótem” w swoim ostatnim zdaniu? Jak wyglądałoby całe wyrażenie regularne bez tego skrótu?
Lonnie Best
5
@LonnieNajlepsze w wyrażeniach regularnych, w przypadku sekwencji specjalnych, takich jak \ w, często obowiązuje konwencja, że ​​sekwencja sterująca wielkimi literami jest odwrotnym zestawem znaków sekwencji sterujących małymi literami. Np. \ D jest odwrotnością \ D, \ s jest odwrotnością \ S, \ w jest odwrotnością \ W, itd. Ponadto w ramach zestawu klas znaków ograniczonych przez [], takich jak [abc], można określić odwrotnie, używając [^ abc]. Zatem \ S jest równoważne z [^ \ s], co byłoby również równoważne z notacją niedozwoloną [^^ \ S], gdyby było dozwolone. (^^ nie jest poprawnym sposobem co stanowi odwrotność odwrotność.)
Dejay Clayton
@DejayClayton Dzięki, nie wiedziałem tego.
Lonnie Best
Ta odpowiedź zadziałała, ale dlaczego \s{2,}przechwytuje nowe linie poprzedzające ją? Gdyby tak było \n\s{2,}, zrozumiałbym. I dlaczego działa wpisanie dosłownej spacji w nawiasach?
trochę mniej
„Ta odpowiedź zadziałała, ale dlaczego \ s {2,} przechwytuje nowe linie, kontynuując ją?” ponieważ \sdopasowuje spacje, tabulatory i podziały wierszy. „A dlaczego wpisywanie dosłownej spacji w nawiasach kwadratowych działa?”, No cóż, błąd, bo tak. Nie wiem, co jeszcze o tym powiedzieć :)
Bart Kiers
0

Regex, aby kierować tylko na dwie spacje: [] {2,} Nawiasy w wyrażeniu regularnym to klasa znaków. To znaczy tylko te znaki. Tutaj tylko przestrzeń. Poniższy nawias klamrowy oznacza dwa lub więcej razy.

Johan
źródło