2017-01-24 3 views
-1

Ich habe gesichtet über das Internet für lange und Stack-Überlauf im Besonderen. Aber, scheine ich nicht eine Regex Erklärung zu finden mehrere Schnitt/nicht-schneidende Teilzeichenketten zu finden:RETURN OVERLAPPING MUSTERN ALS GRUPPEN IN PYTHON

Angenommen meine ursprüngliche Zeichenfolge ist:
aabcdacdacdfghcdacds
und die Sub-String geholt zu werden ist:
cdacd
und ich wünsche von dem Original-String für drei Gruppen die Regex
schneidenden oder nicht schneidenden Unter Strings als Gruppen finden das bedeutet, ich will:
group 1: (cdacd)group 2: (cdacd)
group 3: (cdacd)
Hinweis, dass cdacd für Gruppe 1 und Gruppe 2 in aab cdacdacd FGH cdacd s hat einen Schnitt cd.
Bitte beraten.

+0

Bitte geben Sie Ihr tatsächliches Problem an. Wenn Sie eine Protokollanalyse durchführen, zeigen Sie die tatsächlichen Daten aus Ihrem Protokoll an und erfahren Sie, wie Sie überschneidende Übereinstimmungen finden müssen. (Wenn Sie IPs oder andere relevante Inhalte anonymisieren möchten, tun Sie dies, solange das Problem erkennbar bleibt). Ihre aktuelle Beschreibung ist etwas zu abstrakt, um zu zeigen, welcher Ansatz am besten geeignet wäre. – Amadan

+0

Google -> Suche "Python überlappende Regex" -> Top-Ergebnis. –

+0

@ WiktorStribiżew Bitte lesen Sie die Bearbeitung meiner Frage. Ich möchte, dass die Regex das Muster als Gruppen verarbeitet. Ich möchte nicht findall() von Python verwenden. Dies ist eher eine REGEX-Frage als eine Python-Frage. Nur weil ich die Regex mit Python benutze, wird meine Position nicht kleiner. – vedlociraptor

Antwort

1

versuchen, es wie folgt aus:

In [1]: import re 
In [2]: re.findall('(?=(cdacd))', 'aabcdacdacdfghcdacds') 
Out[2]: ['cdacd', 'cdacd', 'cdacd'] 

von python docs (Suche nach ?=):

Spiele, wenn ... Nächste Spiele, aber eine der Zeichenfolge nicht verbrauchen. Dies wird als Lookahead Assertion bezeichnet. Zum Beispiel wird Isaac (? = Asimov) 'Isaac' nur dann anpassen, wenn 'Asimov' folgt.