2013-06-17 5 views

Antwort

4

Verwenden ABC und XYZ als Anker mit Blick hinter und vorausschauenden Aussagen:

(?<=ABC).*?(?=XYZ) 

Die (?<=...) Blick hinter Behauptung paßt nur an der Stelle in dem Text, der von ABC voraus. In ähnlicher Weise entspricht (?=XYZ) dem Standort, der von XYZ gefolgt wird. Zusammen bilden sie zwei Anker, die den Ausdruck .* begrenzen, der allem entspricht.

Sie alle solche verankerte Textstücke mit re.findall() finden:

for matchedtext in re.findall(r'(?<=ABC).*?(?=XYZ)', inputtext): 

Wenn ABC und XYZ variabel sind, können Sie re.escape() (zu verhindern, dass ihre Inhalte nicht interpretiert als Syntax für reguläre Ausdrücke) verwenden möchten, auf sie und interpolieren:

re.match(r'(?<={}).*?(?={})'.format(abc, xyz), inputtext) 
+0

Vielen Dank @Martijin Es funktioniert: D – sgp

2

ich denke, das ist das, was Sie wollen:

import re 
match = re.search('ABC(.*)XYZ','Blah blah ABC the string to be retrieved XYZ Blah Blah') 
print match.group(1) 
+1

guten Weg, aber fügen Sie ein Fragezeichen nach dem * Quantifier, um es faul zu machen, wenn Sie nicht wollen, dass etwas wie ABC (... XYZ ...) XYZ' –

+0

@ user1572508 ABC und XYZ sind Variablen, die vom Benutzer zu nehmen sind – sgp

+0

dies funktioniert möglicherweise für Python2, nicht 3. – Ooker

Verwandte Themen