2016-04-05 6 views
1

Ob mit Regex können wir den Inhalt zwischen zwei benutzerdefinierten Strings bekommen? Ich benutze Python. So weit habe ich gefunden:Kann regex benutzerdefinierte Strings lesen?

Aber können diese Zeichenfolgen als Benutzereingabe gelesen werden und nicht als feste Eins. Ist das möglich? Irgendwelche Vorschläge werden geschätzt. Vielen Dank im Voraus!

+0

Warum nicht? Aber Sie müssen prüfen, ob sie richtige Regex-Muster sind, bevor Sie sie anwenden. –

Antwort

1

Nur String-Verkettung benutzen Sie den Suchbegriff/regex zu bauen:

string1 = "foo" 
string2 = "bar" 

re.findall(r'{}(.*?){}'.format(string1, string2), text, re.DOTALL) 

bearbeiten: Ich nahm Inspiration von @ Kasramvd Antwort da string.format sauberer ist und ermöglicht es Ihnen, die r Dekoration für regex Flucht zu verwenden. Sie können oder wollen nicht re.escape die Zeichenfolgen je nach Anwendungsfall.

+0

Das sieht einfach aus :) Danke! – user3568044

2

Sie können die Saiten bekommen mit raw_input() und (wenn Sie möchten keine reguläre Ausdrücke Zeichenfolge hinzuzufügen) zu entkommen die Zeichenfolge re.escape(), um die regex Notationen (die in der Zeichenfolge vorhanden sein können)

import re 
string1 = re.escape(raw_input("enter first string: ")) 
string2 = re.escape(raw_input("enter second string: ")) 

re.findall(r"{}(.*?){}".format(string1, string2), text, re.DOTALL) 
+0

Warum flüchten, wenn ein Benutzer ein * reguläres Ausdrucksmuster * in das Eingabefeld eingeben soll? –

+0

@ WiktorStribiżew OP hat gesagt * Benutzer angegebene Zeichenfolgen * und nicht Regex, aber die andere Seite ist, dass er eine Regex bedeutet, lassen Sie mich die Antwort aktualisieren. – Kasramvd

0

mit zu entkommen Hier ist die Art, wie ich immer benutze:

import re 
string1=raw_input() 
string2=raw_input() 
check=re.compile(r'%s(.*)%s'%(string1,string2),re.DOTALL) 
check.findall() 

Hoffe, das hilft Ihnen aus. Vielen Dank!