2017-02-13 3 views
1

Ich möchte Strings aus Text erhalten, wo die Strings zwischen zwei anderen Strings liegen - aber beide dieser beiden Strings sind teilweise mit Regex-Ausdrücken definiert ebenfalls.Python Regex: Suche nach Ausdruck zwischen zwei Ausdrucken (auch regex-ed)

Also, aus den folgenden Zeilen:

ALPHA101BETAsomething1GAMMA532DELTA 
ALPHA231BETAsomething2GAMMA555DELTA 
ALPHA341BETAagainsomethingsomethingGAMMA998DELTA 

Ich möchte folgendes erhalten:

something1 
something2 
againsomething 

hier Mein Problem ist, dass ich nicht die Öffnungs- und Schließ Ausdrücke definieren können, so dass diese sind etwas plus eine dreistellige Ausdrücke plus noch einmal etwas.

Bisher habe ich versucht, aber nicht mit diesem:

re.findall("ALPHA(?:\d\.){3}BETA(.*?)GAMMA(?:\d\.){3}DELTA", pagetext) 

Wie kann ich anweisen, den Parser, der eine bestimmte Regex Gruppe nicht das gewünschte Ergebnis, sondern Teil der Öffnungs-/Schließ Strings?

+0

Ist ihr jede Zeile Seperator? –

+1

Was erwarten Sie mit '(?: \ D \.) {3}'? Gibt es in Ihren Eingabezeichenfolgen literale Punkte? Vielleicht brauchst du nur ['(? S) ALPHA \ d {3} BETA (. *?) GAMMA \ d {3} DELTA' (https://regex101.com/r/XUaVfi/1)? Siehe auch [eine Python-Demo] (https://ideone.com/ecZPuA). –

Antwort

0

Ich änderte die Regex ein wenig und jetzt funktioniert es für mich. können Sie verwenden re.compile, re.search und re.group die spezifische Teilkette erhalten Sie gesucht haben:

import re 
REGEX = re.compile(r'ALPHA(\d){3}BETA(.*?)GAMMA(\d){3}DELTA') 
# The next part is all about how your pagetext is formatted. 
# if you have newlines in the pagetext: 
for line in pagetext.split('\n'): 
    result = re.search(REGEX, line) 
    your_desired_str = result.group(2) 

# if you just want to read the text line by line from a file: 
with open(yourfile) as infile: 
    for line in infile: 
     result = re.search(REGEX, line) 
     your_desired_str = result.group(2) 
0

wird diese Arbeit für Sie: -

import re 
text ='ALPHA101BETAsomething1GAMMA532DELTA\nALPHA231BETAsomething2GAMMA555DELTA\nALPHA341BETAagainsomethingsomethingGAMMA998DELTA' 


for line in text.split('\n'): 

    print re.findall(r'ALPHA+\d+BETA(.*?)GAMMA+\d+DELTA',line)[0] 
+0

Funktioniert das für Sie? –