Es ist möglich, eine übereinstimmung mit einem Zeichen Wiederholung mit regex? Wie?
Frage:
Ist es möglich, mit regex, match ein Wort mit dem gleichen Charakter in verschiedenen Positionen?
Zustand:
Alle Wörter die gleiche Länge haben, wissen Sie, die Charakter-Positionen (beispielsweise der 1., der 2. und der 4.) von der wiederholten char, aber Sie wissen nicht, was es ist.
Beispiele:
mit Kleinbuchstaben 6char Worte, die ich würde gerne mit Wörtern übereinstimmen, wo die 3. und 4. chars sind die gleichen.
parrot <- match for double r
follia <- match for double l
carrot <- match for double r
mattia <- match for double t
rettoo <- match for double t
melone <- doesn't match
Kann ich nicht verwenden Sie den Quantifizierer [\d]{2}, denn es passt zu jeder Folge von zwei Zeichen, und was ist, wenn ich sage, der 2. und der 4. Stelle des 3. und 4.?
Ist es möglich, das zu tun, was ich will mit regex? Wenn ja, wie kann ich das tun?
EDIT:
Fragen Sie fragte in den Kommentaren, ich bin mit python
- Regelmäßige Ausdruck-Motoren unterscheiden sich sehr viel zwischen den Sprachen und tools. Man sollte also immer sagen, welche Sprache oder tool, mit der Sie arbeiten (Perl? Python? grep? C und eine Bibliothek?)
- fertig! Danke! (15char)
- Ist dieses Hausaufgaben?
- Nein, es ist nicht....
- Dies erfordert Rückverweise. Streng genommen, Rückverweise sind nicht "normal", aber alle gängigen regex-engines, die es unterstützen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie ein Rückverweis, dies zu tun:
Diesem match aufeinander folgende vorkommen eines beliebigen Zeichens.
Bearbeiten Hier ist ein Python-Beispiel:
Müssen Sie zurück Referenzen für solche Fälle. Ich bin nicht sicher, welche Sprache Sie verwenden, ich habe versucht, das folgende Beispiel in meinem VI-editor zu suchen Sie nach beliebigen alphabet zu wiederholen.
Muster Regex:
\([a-z]\)\1
Wenn Sie sehen, das Beispiel [a-z] ist das Muster, das Sie suchen, und schließen Sie innerhalb der paranthesis (die Klammern sollten escaped werden in einigen Sprachen). Sobald Sie eine paranthesis, es ist eine Gruppe und bezeichnet werden kann, wieder überall in der regex durch die Verwendung von \1. Wenn es mehr als einer Gruppe, können Sie mit \1, \2 usw.. Mit \1 wird ersetzt durch was auch immer zutraf, in der ersten Gruppe.
Dank
Arvind
/(\b\w*?(\w)\2.*?\b)/
passt jedes Wort mit atleast auf Zeichen Wiederholung
$1 wird das Wort
$2 die erste Wiederholung.
Ja, Sie können mit Rückverweis Konstrukt zu entsprechen, die doppelte Buchstaben.
Den regulären Ausdruck
(?<char>\w)\k<char>
mit genannten Gruppen und für rückreferenzierung, sucht angrenzenden gepaarten Zeichen. Angewandt auf den string "ich nehme eine kleine Tasse," es findet übereinstimmungen in den Worten "ich werde", "klein", und "Kaffee". Metazeichen -\w
findet jeder single-word-Charakter. Die Gruppierung konstruieren(?<char>)
umschließt die Metazeichen zu zwingen, das Modul für reguläre Ausdrücke zu erinnern Teilausdruck übereinstimmen (in diesem Fall wird ein beliebiges einzelnes Zeichen) und speichern Sie es unter dem Namen "char". Der Rückverweis Konstrukt\k<char>
bewirkt, dass der Motor zu vergleichen, das aktuelle Zeichen in der vorher abgestimmten Charakter abgelegt unter "char". Der gesamte reguläre Ausdruck erfolgreich eine übereinstimmung findet, wo auch immer ein einzelnes Zeichen ist die gleiche wie die vorherigen Zeichen.