2016-04-02 8 views
-2

Verwenden Sie einen regulären Ausdruck,Überprüfen Sie, ob ein Wort mindestens zweimal wiederholt wird. (Regulärer Ausdruck)

aus jeder Zeile der Eingabe, die mindestens ein Wort zweimal oder mehrmals wiederholt hat.

Hier ist, wie weit ich gekommen bin.

/(\b\w+\b).*\1

aber es ist falsch, weil es nur prüft, ob einzelne Zeichen, nicht ein Wort.

Eingang: ich könnte krank

ausgegeben: < ich könnte i> sein ll

<> passenden Teil markiert.

also versuche ich (\ b \ w + \ b) (\ b \ w + \ b) * \ 1 , aber es funktioniert nicht vollständig.

Kann jemand Hilfe geben?

Danke.

Antwort

0

sollte diese

(\b\w+\b).*\b\1\b 

Greedy-Algorithmus arbeiten längste Übereinstimmung zu gewährleisten. Wenn Sie möchten, dass die zweite Instanz ein separates Wort ist, müssen Sie auch die Grenzen hinzufügen. So ist es das gleiche wie

\b(\w+)\b.*\b\1\b 
+0

Es bricht für "Hey du hey, wie geht es dir heute? Bist du glücklich? ' –

+0

es entspricht" Hey du hey "wie erwartet. Sehen Sie es sich hier an: https://regex101.com/r/rV4nO2/1 – karakfa

+0

Ja, aber es passt nicht zu anderen Wörtern, die mehr als einmal vorkommen. zum Beispiel 'Sie' –

0

für wiederholte Worte Um zu überprüfen Sie positive lookahead wie diese verwenden können.

Regex:(\b[A-Za-z]+\b)(?=.*\b\1\b)

Erläuterung:

  • (\b[A-Za-z]+\b) wird jedes Wort erfassen.

  • (?=.*\b\1\b) wird nachschauen, ob das von der Gruppe erfasste Wort vorhanden ist oder nicht. Wenn ja, dann wird eine Übereinstimmung gefunden.

Hinweis: - Dies wird wiederholt Ergebnissen führen, weil das Wort, das einmal abgestimmt ist wieder angepasst werden, wenn regex Zeiger es als Wort fängt.

Sie müssen die Programmierung verwenden, um die wiederholten Ergebnisse zu entfernen.

Regex101 Demo

0

Positive lookahead ist kein Muss hier:

/\b([A-Za-z]+)\b[\s\S]*\b\1\b/g 

ERKLÄRUNG

\b([A-Za-z]+)\b  # match any word 
[\s\S]*    # match any character (newline included) zero or more times 
\b\1\b    # word repeated 

REGEX 101 DEMO

Verwandte Themen