2017-09-25 2 views
1

Ich versuche, den Inhalt eines gegebenen Textes zu extrahieren, der mit einem bestimmten Header beginnt.pyparsing, um den Inhalt eines bestimmten Headers zu extrahieren

Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

Zu diesem Zweck habe ich thepyparsing api in dieser Weise verwendet:

ParserElement.defaultWhitespaceChars=(" \t") 
NL = LineEnd().suppress() 
END = StringEnd() 
header_1=Literal('Header Text_A') 
header_2=Literal('Header Text_B') 
any_header = (header_1 | header_2) 
# text isn't just anything! don't accept header line, and stop at the end of 
the input string 
text=Group(~any_header + ~END + restOfLine) 
overall_structure = ZeroOrMore(Group(any_header + 
Group(ZeroOrMore(text)))) 
overall_structure.ignore(NL) 

Der Code funktioniert gut, wenn ich nur einen Eintrag Text mit dem obigen Header haben. Wenn ich jedoch einen Eintrag mit den obigen Beispielen von Headern und auch einem anderen Text habe, funktioniert es nicht. Zum Beispiel, wenn ich einen Eintrag wie:

blablablablabla 
Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

Es ist nicht ... Allerdings funktioniert, wenn ich nur den Text haben:

Header Text_A 
blablabla 
blablablabla 

Header Text_B 
blablablablablan 
blablaa 

es gut funktioniert ..

Haben Sie eine Idee, wie ich die Probleme bitte lösen kann?

+0

Sie müssen den Kopfteil allein oder den Datenteil extrahieren, wenn ein bestimmter Header vorhanden ist? Bitte erläutern Sie Ihre Frage auch mit etwas mehr klaren Beispielen. Ich konnte nicht einmal den Unterschied zwischen Erfolg Beispiel und Fehler Beispiel – JKC

+0

Ich muss den Datenteil bezogen auf einen bestimmten Header extrahieren. Mit anderen Worten, wenn ich einen gegebenen Header gefunden habe, sollte meine Funktion die nach diesem Header vorhandenen Daten extrahieren ... Der Code, den ich implementiert habe, extrahiert diese Information, obwohl sie nur funktioniert, wenn ich einen Text habe, der nur die Header enthält definiert. Das funktioniert nur, wenn ich einen Text mit einer Struktur habe, die die oben definierten Header enthält. Wenn ich einen Text habe, dem ein Text vorausgeht, der nicht mit den Headern übereinstimmt, funktioniert der von mir implementierte Code nicht. Hoffe, dass ich klarer war, Entschuldigung für mein schlechtes Englisch. – Djo

+0

Verwenden Sie Regex, um zu ermitteln, ob bestimmter Text in der Kopfzeile vorhanden ist oder nicht. Falls gefunden, extrahiere den Datenteil, sonst lass es. – JKC

Antwort

0

Verwenden Sie Regex, um zu überprüfen, ob bestimmter Text (in diesem Fall ist es "Header") vorhanden ist oder nicht. Wenn es vorhanden ist, extrahieren Sie den Extrakt, den der Datenteil sonst nicht extrahiert.

Zum Beispiel:

text = 'gfgfdAAA1234ZZZuHeadijjk' 
text = 'gfgfdHeadAAA1234ZZZuijjk' 
text = 'gfgfdAAAHead1234ZZZuijjk' 

m = re.search('Head', text) 
if m: 
    extract the data part 
else: 
    do not extract the data part 

Für alle oben 3 Textwerte, dh unabhängig von der Position des Wort „Kopf“ ist, wird dieser Code überprüfen, ob das Wort „Kopf“ im Text vorhanden ist oder nicht und entsprechend verfahren

Hoffe das hilft.

+0

Ja, ich verstehe die Idee. Aber wie soll ich es mit Pyparssing machen und auch wie ich mit Multillen auf Datenteil umgehen soll? – Djo

Verwandte Themen