2016-04-13 7 views
1

Ich versuche Split Worte vor : Zeichen mit Regex.Python Split-Worte vor ':' Zeichen, aber nicht Zeitstruktur

Allerdings möchte ich nicht split Zeitstruktur, wie 15:46:00 Uhr.

Alle Informationen, die ich habe, ist in einer for Schleife, und kommt aus dem Schaben einer PDF-Datei.

so, mit diesem Code:

for item in result: 
    for key in keyHeaders: 
     if key in item.encode('utf-8'): 
      item = item.replace(key, '') 
    if ':' in item: 
     item = item.replace(':', ':\n') 

Ausgang:

15: 
46: 
00 
State: 
NY 
Phone: 
x-xxx-xxx 

Mit regex oder ohne reguläre Ausdrücke wie kann ich split speziell Worte, aber nicht Zahlen von : Charakter verbunden.

Ich habe das versucht, aber nichts passiert. Tatsächlich teilt es nichts auf.

for item in result: 
    for key in keyHeaders: 
     if key in item.encode('utf-8'): 
      item = item.replace(key, '') 
    lines = re.compile(r'(?<!\\d\\d):(?!\\d\\d)') # expect split words before ':' 
    if item == re.findall(lines, item): 
     item = item.replace(':', ':\n') 

Ausgang:

15:46:00 
State:NY 
Phone:x-xxx-xxx 

Vielen Dank für Ihre Unterstützung!

+0

Wie sieht Ihre ursprüngliche Eingabe aus? Ist es nur '" 15:46:00 Staat: NY Telefon: x-xxx-xxx "'? – wnnmaw

+0

Nicht, es gibt mehrere Elemente, wie 100. Und sie ändern sich je nach Inhalt von PDF. Jedoch sind fast 100% der Wörter vor einem ':' Zeichen. – estebanpdl

+0

Das ist, was mich denken lässt "Regex" könnte eine gute Option sein, sie zu "teilen" – estebanpdl

Antwort

4

Sie haben zwei Probleme mit Ihrem Code. Zuerst hast du eine rohe Zeichenkette benutzt und dann noch die Backslashes auf '\\ d' verdoppelt, ändere diese in '\ d'. Das andere Problem besteht darin, dass Sie den gesamten Artikel mit dem von re.findall zurückgegebenen Wert vergleichen. Wenn Ihre Regexp korrekt war, würde re.findall nur ein ':' für die Elemente zurückgegeben haben, die keine Datumsangaben sind. Sie sollten also entweder mit ':' vergleichen oder einfach alles zurückgeben.

Ihre Regexp ist auch für eine relativ einfache Übereinstimmung übermäßig komplex. Ich würde verwenden so etwas wie:

if not re.findall(r'\d\d:\d\d:\d\d', item): 
    item = item.replace(':', ':\n') 

Darüber hinaus gibt es wahrscheinlich einfache Weise die ganze Arbeit mit re.sub oder re.split zu tun, aber diese sollen Sie über Ihre aktuelle Hürde.

+0

Ausgezeichnet! Vielen dank für Deine Hilfe. Es druckt nur die Ausgabe, nach der ich gesucht habe. Gracias. – estebanpdl

Verwandte Themen