2016-03-31 27 views
0

Ich habe eine TXT-Datei, die die folgende Zeile enthält.Finden Sie einen regulären Ausdruck zwischen zwei Zeichen

<KEY key="Spread" keyvalue="FILENAME"> 

Wie kann ich extrahieren Dateinamen aus der oben mit regulären Ausdrücken Bisher habe ich (in meinem Python-Skript) versucht:

keyvalue="FILENAME"> 
:

if '"Spread" keyvalue' in line: 
    n = re.search(r'\keyvalue="(.*)', line) 
    name = n.group() 
    print name 

Dies entspricht einer Leistung von gibt

aber ich möchte nur ausgeben:

FILENAME 

Was ist der reguläre Ausdruck, den ich brauche?

Antwort

1

Ihre Regex ändern zu,

n = re.search(r'\bkeyvalue="(.*?)"', line) 
name = n.group(1) 

Beispiel:

>>> import re 
>>> s = '''<KEY key="Spread" keyvalue="FILENAME">''' 
>>> n = re.search(r'\bkeyvalue="(.*?)"', s) 
>>> n.group(1) 
'FILENAME' 
>>> 

ODER

Verwendung BeautifulSoup.

>>> from bs4 import BeautifulSoup 
>>> xml = '''<KEY key="Spread" keyvalue="FILENAME">''' 
>>> soup = BeautifulSoup(xml, 'lxml') 
>>> s = soup.find('key', attrs={'key':'Spread'}) 
>>> s.get('keyvalue', None) 
'FILENAME' 
0

Ein weiteres Muster, um zu versuchen:

>>> line = '<KEY key="Spread" keyvalue="FILENAME">' 
>>> re.findall('\s+keyvalue=\"([^"]+)\"', line) 
['FILENAME'] 
0

Versuchen folgende regex. Ich bin mit Lookbehind-Funktion .:

(?<=keyvalue=\").*?(?=\") 

Der Code sollte wie folgt aussehen:

line = '<KEY key="Spread" keyvalue="FILENAME">' 

match = re.search(r"(?<=keyvalue=\").*?(?=\")", line, re.MULTILINE) 
if match: 
    result = match.group() 
    print(result) 

Wenn Spiel erfolgreich ist, sollte es FILENAME drucken.

Verwandte Themen