Jestem początkującym użytkownikiem wyrażeń regularnych i nie mogę się do końca dowiedzieć, jak napisać pojedyncze wyrażenie regularne, które „pasowałoby” do wszystkich zduplikowanych następujących po sobie słów, takich jak:
Paryż w tym na wiosnę.
Nie to jest powiązane.
Dlaczego się śmiejesz? Czy moje wyrażenia regularne są TAKIE złe?
Czy istnieje jedno wyrażenie regularne, które będzie pasować do WSZYSTKICH powyższych pogrubionych ciągów?
regex
duplicates
capture-group
Joshua
źródło
źródło
not that that is related
->not that is related
)? Z góry dziękuję\1
!\b(\w+)\s+(\1\s*)+\b
?Odpowiedzi:
Wypróbuj to wyrażenie regularne:
Oto
\b
granica słowa i\1
odwołuje się do przechwyconego dopasowania z pierwszej grupy.źródło
\0
? (Gdzie\0
jest całe wyrażenie regularne, aż do bieżącego punktu LUB gdzie\0
odnosi się do całego wyrażenia regularnego)Uważam, że to wyrażenie regularne obsługuje więcej sytuacji:
Dobry wybór ciągów testowych można znaleźć tutaj: http://callumacrae.github.com/regex-tuesday/challenge1.html
źródło
<strong>\0</strong>
ale nie działa.$1 <strong>$2</strong>
. Ale użyj też innego wyrażenia regularnego/\b(\S+) (\1)\b/gi
. Oto link: callumacrae.github.io/regex-tuesday/…<p class="bebe">bla bla</p>
jak mogę zintegrować tę formułę wyrażenia regularnego?Spróbuj tego z poniższym RE
() * Powtarzam ponownie
źródło
Powszechnie używana biblioteka PCRE poradzi sobie z takimi sytuacjami (nie osiągniesz tego samego z silnikami regex zgodnymi z POSIX):
źródło
\W+
.\b
nie zrobi tego, ponieważ nie zużywa żadnych postaci.... the these problems...
. To rozwiązanie nie jest tak wiarygodne, jak ogólna struktura wzorca Gumbo, który dostatecznie realizuje granice słów.<p class="bebe">bla bla</p>
jak mogę zintegrować tę formułę wyrażenia regularnego?Oto wyrażenie regularne, którego używam do usuwania zduplikowanych fraz w moim bocie twitch:
(\S+\s*)
szuka dowolnego ciągu znaków, który nie jest białą spacją, po którym następuje spacja.\1{2,}
następnie szuka więcej niż 2 wystąpień tej frazy w ciągu do dopasowania. Jeśli istnieją 3 identyczne frazy, pasuje.źródło
\s*
grupę przechwytywania. Zobacz prezentację: regex101.com/r/JtCdd6/1I said "oioioi" that's some wicked mistressship!
naoioioi
isss
Poniższe wyrażenie powinno działać poprawnie, aby znaleźć dowolną liczbę kolejnych słów. Dopasowanie może nie uwzględniać wielkości liter.
Przykładowe dane wejściowe: Goodbye goodbye GooDbYe
Przykładowe wyjście: Do widzenia
Wyjaśnienie:
Wyrażenie regularne:
\ b: Początek granicy słowa
\ w +: Dowolna liczba znaków słowa
(\ s + \ 1 \ b) *: Dowolna liczba spacji, po której następuje słowo, które pasuje do poprzedniego słowa i kończy granicę słowa. Całość opakowana * pomaga znaleźć więcej niż jedno powtórzenie.
Grupowanie:
m.group (0): Powinien zawierać dopasowaną grupę w powyższym przypadku Goodbye goodbye GooDbYe
m.group (1): Musi zawierać pierwsze słowo dopasowanego wzorca w powyższym przypadku Goodbye
Metoda Replace powoduje zastąpienie wszystkich kolejnych dopasowanych słów pierwszym wystąpieniem danego słowa.
źródło
Nie. To jest nieregularna gramatyka. Mogą istnieć wyrażenia regularne specyficzne dla silnika / języka, których można użyć, ale nie ma uniwersalnego wyrażenia regularnego, które to umożliwia.
źródło
Oto taki, który wielokrotnie łapie wiele słów:
źródło
<p class="bebe">bla bla</p>
jak mogę zintegrować tę formułę wyrażenia regularnego?<p class="bebe">.*?\b\s+(\w+)\b\K\s+\1\s+\b(?=.*?<\/p>)
Regex to Strip 2+ zduplikowane słowa (kolejne / nie kolejne słowa)
Wypróbuj to wyrażenie regularne, które może wychwycić 2 lub więcej zduplikowanych słów i pozostawić tylko jedno słowo. A zduplikowane słowa nie muszą nawet następować po sobie .
Tutaj
\b
jest używany do granicy słowa,?=
jest używany do pozytywnego wyprzedzania i\1
jest używany do odwoływania się wstecz.Przykładowe źródło
źródło
"the cat sat on the mat"
" cat sat on the mat"
Przykład w Javascript: The Good Parts można dostosować do tego:
\ b używa \ w dla granic słów, gdzie \ w jest równoważne z [0-9A-Z_a-z]. Jeśli nie masz nic przeciwko temu ograniczeniu, zaakceptowana odpowiedź jest w porządku.
źródło
Ponieważ niektórzy programiści przychodzą na tę stronę w poszukiwaniu rozwiązania, które nie tylko eliminuje zduplikowane następujące po sobie podciągi niebędące białymi znakami, ale także potrójne powtórzenia i więcej, pokażę dostosowany wzorzec.
Wzorzec:
/(\b\S+)(?:\s+\1\b)+/
( Demonstracja wzorca )Zastąp:
$1
(zastępuje dopasowanie pełnego ciągu grupą przechwytywania nr 1)Ten wzorzec zachłannie dopasowuje „cały” podciąg niebędący białymi znakami, a następnie wymaga jednej lub więcej kopii dopasowanego podciągu, który może być oddzielony jednym lub większą liczbą białych znaków (spacja, tabulator, nowa linia itp.).
Konkretnie:
\b
Znaki (granica słowa) są niezbędne, aby zapewnić, że częściowe słowa nie zostaną dopasowane.+
(jeden lub więcej kwantyfikator) w grupie non-przechwytywania jest bardziej odpowiednie niż*
ponieważ*
będzie „przeszkadza” silnik regex do przechwytywania i zastąpić Singleton zdarzeń - jest marnotrawstwem wzornictwo.* uwaga, jeśli masz do czynienia ze zdaniami lub ciągami wejściowymi z interpunkcją, wówczas wzorzec będzie wymagał dalszego dopracowania.
źródło
To wyrażenie (zainspirowane przez Mike'a powyżej) wydaje się wychwytywać wszystkie duplikaty, potrójne powtórzenia itp., W tym te na końcu łańcucha, których większość innych nie robi:
Wiem, że pytanie zadane, aby dopasować tylko duplikaty , ale potrójne to tylko 2 duplikaty obok siebie :)
Po pierwsze,
(^|\s+)
upewniłem się, że zaczyna się od pełnego słowa, w przeciwnym razie „stek dziecięcy” trafiłby do „bułki dziecięcej” (litery „s” pasowałyby). Następnie dopasowuje wszystkie pełne słowa ((\b\S+\b)
), po których następuje koniec string ($
) lub liczba spacji (\s+
), całość powtórzona więcej niż raz.Próbowałem tego w ten sposób i zadziałało dobrze:
źródło
\b
na końcu w ten sposób:/(^|\s+)(\S+)(($|\s+)\2)+\b/g, "$1$2")
To będzie działać w takich sytuacjach:the the string String string stringing the the along the the string
stanie sięthe string stringing the along the string
Notatkastring stringing
. Zostanie dopasowany do Twojej odpowiedzi. Dziękuję Ci.Użyj tego, jeśli chcesz, aby sprawdzanie duplikatów słów nie było uwzględniane.
źródło