Wie bekomme ich einen Teil des Regex-Spiels als Variable in Python?

In Perl ist es möglich, so etwas zu machen (ich hoffe die Syntax ist richtig …):

$string =~ m/lalala(I want this part)lalala/; $whatIWant = $1; 

Ich möchte das gleiche in Python machen und den Text in der Klammer in einem String wie $ 1 bekommen.

7 Solutions collect form web for “Wie bekomme ich einen Teil des Regex-Spiels als Variable in Python?”

Siehe: Python-Regex-Match-Objekte

 >>> import re >>> p = re.compile("lalala(I want this part)lalala") >>> p.match("lalalaI want this partlalala").group(1) 'I want this part' 

Wenn Sie Teile nach Namen erhalten möchten, können Sie dies auch tun:

 >>> m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcom Reynolds") >>> m.groupdict() {'first_name': 'Malcom', 'last_name': 'Reynolds'} 

Das Beispiel wurde aus den Re Docs genommen

 import re astr = 'lalalabeeplalala' match = re.search('lalala(.*)lalala', astr) whatIWant = match.group(1) if match else None print(whatIWant) 

Eine kleine Anmerkung: in Perl, wenn du schreibst

 $string =~ m/lalala(.*)lalala/; 

Die regexp kann überall in der Zeichenfolge übereinstimmen. Das Äquivalent wird mit der Funktion re.search() , nicht die Funktion re.match() , die erfordert, dass die re.match() am Anfang des Strings beginnt.

 import re data = "some input data" m = re.search("some (input) data", data) if m: # "if match was successful" / "if matched" print m.group(1) 

Überprüfen Sie die Dokumente für mehr.

Es gibt keine Notwendigkeit für Regex. Denke einfach

 >>> "lalala(I want this part)lalala".split("lalala") ['', '(I want this part)', ''] >>> "lalala(I want this part)lalala".split("lalala")[1] '(I want this part)' >>> 
 import re match = re.match('lalala(I want this part)lalala', 'lalalaI want this partlalala') print match.group(1) 
 import re string_to_check = "other_text...lalalaI want this partlalala...other_text" p = re.compile("lalala(I want this part)lalala") # regex pattern m = p.search(string_to_check) # use p.match if what you want is always at beginning of string if m: print m.group(1) 

Beim Versuch, ein Perl-Programm in Python zu konvertieren, das Funktionsnamen aus Modulen analysiert, habe ich in dieses Problem gegangen, erhielt ich eine Fehlermeldung, dass "Gruppe" undefiniert war. Ich erkannte bald, dass die Ausnahme geworfen wurde, weil p. Match / p. Suche zurück 0, wenn es keine passende Zeichenfolge gibt.

So kann der Gruppenoperator darauf nicht funktionieren. Um eine Ausnahme zu vermeiden, überprüfen Sie, ob eine Übereinstimmung gespeichert wurde, und wenden Sie dann den Gruppenoperator an.

 import re filename = './file_to_parse.py' p = re.compile('def (\w*)') # \w* greedily matches [a-zA-Z0-9_] character set for each_line in open(filename,'r'): m = p.match(each_line) # tries to match regex rule in p if m: m = m.group(1) print m 
  • Entfernen Sie Kommas in einer Zeichenkette, umgeben von einem Komma und doppelten Anführungszeichen / Python
  • Platz für zwei Arten von Anführungszeichen in einer Regex
  • Python Regular Expression Match Alle 5 Digit Numbers aber keine Größer
  • Einfügen von Zeichenfolge zum Ende der Nummer
  • Prüfen Sie, ob String mit dem Muster übereinstimmt
  • Regulärer Ausdruck: Bereich finden, außer für einen Buchstaben oder einen Bereich
  • Python re.findall () funktioniert nicht wie erwartet
  • Regelmäßiger Ausdruck, um die Netzwerkschnittstelle zu analysieren
  • Handhabung von Erfassungsgruppen in re-
  • Python multiline reguläre Ausdrücke
  • Überprüfen, ob zwei Python-Regex-Muster gleich sind
  • Python ist die beste Programmiersprache der Welt.