2017-04-05 1 views
-1

Ich möchte alle Wörter, die von einem bestimmten Kontext umgeben sind, aus einer großen Datei finden und extrahieren. Alle Zeilen in der Datei in etwa so aussehen wie diese, aber mit verschiedenen Worten zwischen > und <\w>:Suche Zeichenfolge in bestimmten Kontext mit grep

<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">and<\w> 

Ich möchte nur die Ausgabe sein ‚und‘. Ich möchte also im Grunde alle Zeichenfolgen (Wörter, Interpunktionen und Zahlen) extrahieren, die sich im Kontext >xxx<\w> befinden. Ich habe versucht, eine Reihe von verschiedenen Alternativen mit grep und regex, aber ich entweder alle Wörter bekommen oder das Muster mit > und <\w> ... Von der gesamten Datei, die ich die Ausgabe wie folgt aussehen wollen würde:

and 
we 
appreciate 
this 
very 
much 
. 

Und so weiter ...

+1

fügen Sie den Eingabetext und erwartete Ausgabe – RomanPerekhrest

+0

Entschuldigung, aus irgendeinem Grund zeigte es nicht das erste Mal, dass ich gepostet –

+2

"Ich will nur die Ausgabe zu sein" und "" ist keine ausreichende Erklärung dessen, was Sie erreichen wollen. Bitte geben Sie uns ein Beispiel dafür, wie die Ausgabe aussehen soll. Ansonsten, meine Empfehlung ist es, diesen Code zu verwenden: 'echo" und "' – sadmicrowave

Antwort

0

Sie können ein Muster wie dieses verwenden. Dies passt alles zwischen > und <\w>.

import re 
pat = re.compile(r'>(.*?)<\\w>') 
pat.findall(input_string) 
+0

Ihr Muster schließt die '>' und '<\w>' Zeichensätze nicht von den gewünschten Ergebnissen aus – sadmicrowave

0

Ok. In Anbetracht der Eingabedatei mit den folgenden Werten (ich hoffe, ich verstehe Ihre Use Case):

<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">and<\w> 
<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">we<\w> 
<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">appreciate<\w> 
<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">this<\w> 
<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">very<\w> 
<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">much<\w> 
<="UO" lemma="|" lex="|" sense="|" prefix="|" suffix="|" compwf="|" complemgram="|" ref="05" dephead="04" deprel="ET">.<\w> 

Die folgende Python Regex sollte für Sie arbeiten:

>>> import re 
>>> pat = re.compile(r'(?<=">)(.*)(?=<\\w>)') 
>>> pat.findall(input_string) 
['and', 'we', 'appreciate', 'this', 'very', 'much', '.'] 
+0

Ihr Muster wird für Interpunktionszeichen fehlschlagen. wie die '.' am Ende –

+0

hast du Recht, ich habe meine Regex – sadmicrowave

+0

aktualisiert, was ist, wenn' '' dazwischen liegt? wie '>><\w>' –

Verwandte Themen