2016-05-28 11 views
1

Ich möchte ein Wort finden, die vor einem Schlüsselwort angezeigt (von mir festgelegt und gesucht) und das Ergebnis ausdrucken. Ich habe versucht, Code unten, aber es gibt mir nach Worten vor nicht ...wie vorherige Zeichenfolge nach der Auswahl bestimmter Zeichenfolge Python

str = "Phone has better display, good speaker. Phone has average display" 
    p1 = re.search(r"(display>=?)(.*)", str) 
    if p1 is None: 
     return None 
    return p1.groups() 

dieser Code gibt mir

, good speaker. Phone has average display 

, aber ich möchte nur

better,average 

Antwort

2

Sie können eine positive Vorschau verwenden mit findall anstelle von search:

>>> p = re.compile(r'(\w+)\s+(?=display)') 
>>> p.findall(str) 
['better', 'average'] 
+1

ja, es funktioniert. Was ist der Unterschied zwischen r '(\ w +) \ s + (? = Anzeige) & r' (\ w +) \ s * (? = Anzeige) – Vivek

+0

'\ s +': ein oder mehrere Leerzeichen, '\ s *' Null oder mehr Leerzeichen. Der erste wird also nicht mit "neodisplay" übereinstimmen (da es keine Leerzeichen vor "display" gibt), während der zweite wird. –

0

Sie können eine positive Vorschau Behauptung verwenden ?=:

import re 

str = "Phone has better display, good speaker. Phone has average display" 
p1 = re.findall(r"(\w+)\s*(?=display)", str) 
print(p1) 
# ['better', 'average'] 

\w bedeutet ein Wortzeichen.

Verwandte Themen