2013-06-17 9 views

risposta

4

Usa ABC e XYZ come ancore con asserzioni look-dietro e look-ahead:

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

L'affermazione (?<=...) look-dietro corrisponde solo alla posizione nel testo che è stato preceduto da ABC. Analogamente, (?=XYZ) corrisponde alla posizione seguita da XYZ. Insieme formano due ancore che limitano l'espressione .*, che corrisponde a qualsiasi cosa.

Potete trovare tutti questi pezzi ancorate di testo con re.findall():

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

Se ABC e XYZ sono variabili, che si desidera utilizzare re.escape() (per evitare qualsiasi del loro contenuto da essere interpretate come sintassi delle espressioni regolari) su di loro e interpolare:

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

Grazie mille @Martijin Funziona: D – sgp

2

credo che questo sia ciò che si vuole:

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

buon modo, ma aggiungi un punto interrogativo dopo il quantificatore * per renderlo pigro se non vuoi abbinare qualcosa come 'ABC (... XYZ ...) XYZ' –

+0

@ user1572508 ABC e XYZ sono variabili da prelevare dall'utente – sgp

+0

questo può funzionare per Python2, non 3. – Ooker

Problemi correlati