Es ist möglich, eine Zeichenwiederholung mit Regex zu vergleichen? Wie?

7

Frage:
Ist es möglich, mit regex ein Wort zu finden, das dasselbe Zeichen an verschiedenen Stellen enthält?

Bedingung:
Alle Wörter haben die gleiche Länge, Sie kennen die Zeichenpositionen (Beispiel 1., 2. und 4.) des wiederholten Zeichens, aber Sie wissen nicht, was es ist.

Beispiele:
Ich benutze 6char Wörter in Kleinbuchstaben. Ich würde gerne Wörter suchen, bei denen der 3. und der 4. Buchstabe identisch sind.

%Vor%

Ich kann den Quantifizierer [\ d] {2} nicht verwenden, weil er einer Folge von zwei Zeichen entspricht, und was, wenn ich statt der 3. und 4. Stelle die 2. und 4. Stelle sage?

Ist es möglich, mit Regex zu machen, was ich will? Wenn ja, wie kann ich das tun?

BEARBEITEN:
Frag in den Kommentaren, ich benutze Python

    
Andrea Ambu 21.06.2009, 13:33
quelle

4 Antworten

26

Sie können dazu eine Rückreferenz verwenden:

%Vor%

Dies wird aufeinanderfolgende Vorkommen eines beliebigen Zeichens entsprechen.

Bearbeiten Hier ist ein Beispiel für Python:

%Vor%     
Gumbo 21.06.2009, 13:38
quelle
7

Sie müssen für solche Fälle Rückverweise verwenden. Ich bin mir nicht sicher, welche Sprache Sie verwenden. Ich habe das folgende Beispiel in meinem VI-Editor ausprobiert, um nach einem beliebigen Alphabet zu suchen.    Musterregex: \([a-z]\)

Wenn Sie das Beispiel sehen, ist [a-z] das Muster, nach dem Sie suchen, und schließen Sie das innerhalb der Paranthesis ein (die Parantheses sollten in einigen Sprachen maskiert sein). Sobald Sie eine Paranthese haben, handelt es sich um eine Gruppe, und Sie können sie an jeder beliebigen Stelle in der Regex erneut verwenden, indem Sie \ 1 verwenden. Wenn es mehr als eine Gruppe gibt, können Sie \ 1, \ 2 usw. verwenden. \ 1 wird durch das ersetzt, was in der ersten Gruppe gefunden wurde.

Danke Arvind

    
Arvind 21.06.2009 13:42
quelle
2

/(\b\w*?(\w).*?\b)/

passt jedes Wort mit mindestens einer Zeichenwiederholung an $ 1 ist das Wort $ 2 die erste Wiederholung.

    
Martijn Laarman 21.06.2009 13:42
quelle
0

Ja, Sie können das Backreference-Konstrukt verwenden, um die doppelten Buchstaben zu finden.

Der reguläre Ausdruck (?<char>\w)\k<char> sucht mit benannten Gruppen und Backreferencing nach benachbarten gepaarten Zeichen. Wenn auf die Zeichenfolge "Ich trinke einen kleinen Kaffee" angewendet wird, werden Übereinstimmungen in den Wörtern "Ich werde", "Klein" und "Kaffee" gefunden. Das Metazeichen \w findet ein einzelnes Wortzeichen. Das Gruppierungskonstrukt (?<char>) schließt das Metazeichen ein, um zu erzwingen, dass die Engine für reguläre Ausdrücke sich an eine Teilausdrucksübereinstimmung (die in diesem Fall ein einzelnes Zeichen ist) erinnert und diese unter dem Namen "char" speichert. Das Backreference-Konstrukt \k<char> bewirkt, dass die Engine das aktuelle Zeichen mit dem zuvor übereinstimmenden Zeichen vergleicht, das unter "char" gespeichert ist. Der gesamte reguläre Ausdruck findet erfolgreich eine Übereinstimmung, wenn ein einzelnes Zeichen mit dem vorhergehenden Zeichen übereinstimmt.

    
Rashmi Pandit 21.06.2009 15:43
quelle

Tags und Links