2017-03-29 10 views
0

Ich habe eine Liste von Zeichenfolgen und möchte genaue Phasen zu finden.Python regex zu finden Phrasen genaue Worte enthalten

Bis jetzt findet mein Code nur den Monat und das Jahr, aber die gesamte Phase einschließlich "- Recorded" wird benötigt, wie "März 2016 - Recorded".

Wie kann es auf die "- Recorded" der Regex hinzufügen?

import re 


texts = [ 

"Shawn Dookhit took annual leave in March 2016 - Recorded The report", 
"Soondren Armon took medical leave in February 2017 - Recorded It was in", 
"David Padachi took annual leave in May 2016 - Recorded It says", 
"Jack Jagoo", 
"Devendradutt Ramgolam took medical leave in August 2016 - Recorded Day back", 
"Kate Dudhee", 
"Vinaye Ramjuttun took annual leave in - Recorded Answering" 

] 

regex = re.compile('(?P<month>[a-zA-Z]+)\s+(?P<year>\d{4})\s')  

for t in texts: 
    try: 
     m = regex.search(t) 
     print m.group() 
    except: 
     print "keyword's not found" 
+1

Uhm, fügen Sie '*' Ich denke, würde.. –

+1

Oder '(?: \ W + \ w +)?' –

+1

Könnten Sie bitte klarstellen: Möchten Sie nur den Text einschließen, der genau (equals) '- Recorded' ist? 'r '(? P [a-zA-Z] +) \ s + (? P \ d {4}) \ s (?: - \ s * aufgezeichnet)?' '? Oder irgendein 1 Wort nach einem oder mehreren Nicht-Wortzeichen (dann siehe meinen obigen Kommentar)? Oder der Rest der Linie (siehe Sebastians Kommentar)? –

Antwort

2

Sie haben 2 genannten Gruppen hier: month und year, die von Saiten Monat und Jahr dauert. Um - Recorded in recorded benannte Gruppe erhalten Sie können dies tun:

regex = re.compile('(?P<month>[a-zA-Z]+)\s+(?P<year>\d{4})\s(?P<recorded>- Recorded)') 

Oder wenn man einfach - Recorded zu Ihrem regulären Ausdruck hinzuzufügen, ohne benannte Gruppe:

regex = re.compile('(?P<month>[a-zA-Z]+)\s+(?P<year>\d{4})\s- Recorded') 

Oder können Sie benannte Gruppe hinzufügen other mit Bindestrich und ein großgeschriebenes wort:

regex = re.compile('(?P<month>[a-zA-Z]+)\s+(?P<year>\d{4})\s(?P<other>- [A-Z][a-z]+)') 

Ich denke, die erste oder dritte Option ist vorzuziehen, weil Sie bereits benannt haben gro UPS. Auch ich empfehle Ihnen, diese Web site http://pythex.org/ zu benutzen, es hilft wirklich, Regex zu konstruieren :).

+0

danke für die Hilfe. –

1

eine Liste Verständnis mit der korrigierten regex Verwendung:

regex = re.compile('(?P<month>[a-zA-Z]+)\s+(?P<year>\d{4})\s* - Recorded') 

matches = [match.groups() for text in texts for match in [regex.search(text)] if match] 
print(matches) 
# [('March', '2016'), ('February', '2017'), ('May', '2016'), ('August', '2016')] 
+0

danke für das wissen. –

Verwandte Themen