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?
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.
Odpowiedzi:
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
\r
i\n
co najmniej dwa razy (zauważ, że kapitałS
w\S
to skrót[^\s]
).źródło
\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?\s
dopasowuje 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ć :)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.
źródło