2009-11-26 5 views

Antwort

14

See: Python regex match objects

>>> import re 
>>> p = re.compile("lalala(I want this part)lalala") 
>>> p.match("lalalaI want this partlalala").group(1) 
'I want this part' 
4
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 docs für mehr.

1
import re 
match = re.match('lalala(I want this part)lalala', 'lalalaI want this partlalala') 
print match.group(1) 
10
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 Sie

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

die regexp überall in der Zeichenkette schreiben mithalten können. Das Äquivalent wird mit der Funktion re.search() ausgeführt, nicht mit der re.match()-Funktion, die erfordert, dass das Muster ab dem Anfang der Zeichenfolge übereinstimmt.

17

Wenn Sie Teile zu erhalten, indem Namen, den Sie auch dies tun können:

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

Das Beispiel aus dem re docs

2

genommen gibt es 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)' 
>>> 
+0

Sehr schlaue Idee :) – Linh

0
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) 

Bei dem Versuch, ein Perl-Programm zu Python zu konvertieren, die aus Modulen Funktionsnamen parsen, lief ich in dieses Problem, erhielt ich eine Fehlermeldung „Gruppe“ zu sagen war nicht definiert. Ich erkannte bald, dass die Ausnahme geworfen wurde, weil p. Übereinstimmung/p. Suche gibt 0 zurück, wenn keine übereinstimmende Zeichenfolge vorhanden ist.

So kann der Gruppenoperator nicht darauf 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 
Verwandte Themen