Jak szukać wystąpień więcej niż jednej spacji między słowami w wierszu
1. this is a line containing 2 spaces
2. this is a line containing 3 spaces
3. this is a line containing multiple spaces first second three four
Wszystkie powyższe są poprawnymi dopasowaniami dla tego wyrażenia regularnego. Jakiego wyrażenia regularnego powinienem użyć?
Odpowiedzi:
SPACJA (2 lub więcej)
Możesz również sprawdzić, czy przed i po tych spacjach następują słowa. (nie inne spacje, takie jak tabulatory lub nowe wiersze)
to samo, ale możesz także wybrać (przechwycić) tylko przestrzenie do zadań, takich jak wymiana
lub zobacz, że przed i po spacji jest cokolwiek, nie tylko znaki słów (z wyjątkiem białych spacji)
źródło
\w
oznacza „znaki słowne”, czyli znaki alfanumeryczne i podkreślenia, ale nie inne znaki niebędące spacjami. Aby sprawdzić, czy nie ma białych znaków, użyj\S
(duże S). Ponadto pierwszy z nich dopasuje tylko wiersze zawierające dwie lub więcej spacji i nic więcej.\S
, po prostu wolę nie polegać na wielkości liter dla takiej funkcjonalności, jest łatwiejszy do odczytania.\w[ ]{2,}\w
nie uda się dopasowaćword.<2 spaces>more words
lub ciąg składający się wyłącznie ze spacji.[^\s]([ ]{2,})[^\s]\w
nie powiedzie się na linii, które zaczynają się od spacji lub strun jakbla<2 spaces>.
...Proste rozwiązanie:
To dopasowuje wszystkie wystąpienia jednego lub więcej białych znaków. Jeśli chcesz dopasować całą linię, ale tylko wtedy, gdy zawiera ona dwa lub więcej następujących po sobie białych znaków:
Jeśli spacje nie muszą następować po sobie:
źródło
.*
jest zwykle chciwi, co oznacza, że osiągnie koniec badanego łańcucha, a wszystko, co następuje, jeżeli nie są wymagane znaki, nie będzie pasował. Zwykle w tym przypadku dobrą praktyką jest dodawanie w?
ten sposób.*?
. Zdarzyło mi się to przy użyciu PCRE PHP/^.*b.*$/
faktycznie pasuje"foobar"
, nawet jeśli można by się spodziewać, że pierwszy chciwy.*
dopasuje już cały ciąg.To wyrażenie regularne wybiera wszystkie spacje, możesz tego użyć i zastąpić je pojedynczą spacją
przykład w pythonie
źródło
Wyszukaj
[ ]{2,}
. Spowoduje to znalezienie dwóch lub więcej sąsiednich pól w dowolnym miejscu linii. Dopasuje również spacje wiodące i końcowe, a także linie składające się wyłącznie ze spacji. Jeśli tego nie chcesz, sprawdź odpowiedź Alexandra.Właściwie możesz pominąć nawiasy, są one tylko dla przejrzystości (w przeciwnym razie powtarzający się znak spacji nie jest tak dobrze widoczny :)).
Problem
\s{2,}
polega na tym, że będzie również dopasowywać znaki nowej linii w plikach systemu Windows (gdzie znaki nowej linii są oznaczoneCRLF
lub\r\n
dopasowane przez\s{2}
.Jeśli chcesz również znaleźć wiele tabulatorów i spacji, użyj
[ \t]{2,}
.źródło
more than one space between words in a line
. Jaka jest[ ]{2,}
między słowami? Czy w ogóle przeczytałeś pytanie?Oto moje rozwiązanie
Spowoduje to usunięcie wszystkich cyfr, przecinków i nowych wierszy, ale wybierz środkową przestrzeń, na przykład zestaw danych
źródło