2017-12-08 2 views
0

Ich habe einen Zweifel über Regex mit Rückreferenz.Verwenden von Python Regex mit Rückreferenz übereinstimmt

Ich muss Zeichenfolgen übereinstimmen, ich versuche diese Regex (\w)\1{1,}, um wiederholte Werte meiner Zeichenfolge zu erfassen, aber diese Regex erfassen nur aufeinanderfolgende wiederholte Zeichenfolgen; Ich bin fest meine regex zu verbessern alle wiederholten Werte zu erfassen, im Folgenden einige Beispiele:

import re 

str = 'capitals' 

re.search(r'(\w)\1{1,}', str) 

Output None

import re 

str = 'butterfly' 

re.search(r'(\w)\1{1,}', str) 

<_sre.SRE_Match object; span=(2, 4), match='tt'>

+0

Was versuchen Sie im ersten Beispiel übereinzustimmen? – Barmar

+0

Sie können '. *' Vor der Rückreferenz verwenden, um irgendetwas zwischen den Übereinstimmungen zuzulassen. – Barmar

+0

@Barmar Ich versuche, das wiederholte Auftreten von Buchstaben a – user3722709

Antwort

0

ich r'(\w).*\1 so verwenden würde, dass es jede wiederholte Zeichen erlaubt sogar wenn sich dazwischen Sonderzeichen oder Leerzeichen befinden.

jedoch diese nicht funktioniert für Zeichenfolge mit wiederholten Zeichen überlappen die Inhalte von Gruppen wie die Zeichenfolge abcdabcd, in dem er erkennt nur die erste Gruppe, die anderen wiederholten Zeichen eingeschlossen in der ersten Gruppe zu ignorieren (b, c, d)

die Demo-Check: https://regex101.com/r/m5UfAe/1

So eine Alternative (und je nach Bedarf) ist die Zeichenfolge zu sortieren analysiert:

import re 
str = 'abcdabcde' 
re.findall(r'(\w).*\1', ''.join(sorted(str))) 

das Array mit der Wieder Rückkehr peated Zeichen ['a','b','c','d']

+0

Es hat hier funktioniert! Aber Sie können erklären, warum, wenn ich die sortierte eingebaute Funktion entferne, ist die Ausgabe nicht korrekt?!? Ausgang mit sortiert: 're.findall (regex_pattern '' .join (sortiert ("Testen dieses" .unterhalb())))' ' [ 'I', 'S', 'T']' Ausgabe unsortiert: 're.findall (regex_pattern, '' .join ("Prüfung dieses" .unterhalb()))' '[ 't']' – user3722709

+0

@ user3722709 Wenn Sie es nicht sortieren , Sie geben nur die gleiche Zeichenfolge zurück. – Barmar

Verwandte Themen