2016-04-20 6 views
3

Ich habe die folgende Beispiel string:Wie erhalten Sie alle Übereinstimmungen in Python mit RegEx, wenn das Muster ähnlichen Text enthält?

dies ein Test für den Verlust von Offsite-Leistung ist

Ich habe folgende Tags:

Offsite Macht, Verlust von Offsite-Leistung

Ich versuche, alle Übereinstimmungen aus der Zeichenfolge zu erhalten. Jedoch, wenn ich diesen Code haben:

import re 

description = 'this is a test of the loss of offsite power' 
all_tags = ['offsite power', 'loss of offsite power'] 
reg_ex = '|'.join(['\\b%s\\b' % t for t in all_tags]) 

expression = re.compile(reg_ex, re.IGNORECASE) 

matches = re.findall(expression, description) 

results = [m for m in matches] 

print results 

Meine Ergebnisse sind wie folgt:

['loss of offsite power'] 

ich beide Instanzen der Tags erhalten müssen. Ich weiß, dass ich dies tun kann, indem ich jedes Tag durchlaufen und dann die Beschreibung jedes Tags durchsuche, aber gibt es eine Möglichkeit, dies in 1 Suche zu tun?

Mein Code ist für Python 2.7, aber ich werde auch Python 3 Antworten akzeptieren.

Hinweis: Meine Liste der endgültigen Schlüsselwörter ist etwa 2000 Sätze ähnlich wie oben.

+0

Sind die Tags * Literale *? –

+0

@ WiktorStribiżew ja, das sind sie. Es muss für jedes der Tags genau stimmen. – CodeLikeBeaker

Antwort

2

Ziemlich einfach: Verwenden Sie das neuere Modul regex von Matthew Barnett, die überlappende Übereinstimmungen ermöglicht. In Python:

import regex as re 
string = 'this is a test of the loss of offsite power' 

all_tags = ['offsite power', 'loss of offsite power'] 
reg_ex = '|'.join(['\\b%s\\b' % t for t in all_tags]) 

expression = re.compile(reg_ex, re.IGNORECASE) 

# mind overlapped=True ! 
matches = re.findall(expression, string, overlapped=True) 
print matches 
# ['loss of offsite power', 'offsite power'] 

das Modul zu erhalten, tut einfach pip install regex auf der Kommandozeile. Es funktioniert auch mit re.finditer().

+0

Das funktionierte wie ein Zauber. Vielen Dank – CodeLikeBeaker

+0

@JasonHeine: Gut zu helfen :) – Jan

Verwandte Themen