2009-11-26 13 views

Respuesta

14

Ver: 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) 

Compruebe el docs para más.

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) 

Una pequeña nota: en Perl, al escribir

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

la expresión regular puede coincidir con cualquier parte de la cadena. El equivalente se logra con la función re.search(), no con la función re.match(), que requiere que el patrón coincida comenzando al principio de la cadena.

17

Si desea obtener partes en nombre también se puede hacer esto:

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

El ejemplo fue tomado de la re docs

2

no hay necesidad de expresiones regulares. piensa simple.

>>> "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

Very smart idea :) – 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) 

Al tratar de convertir un programa de Perl a Python que analiza los nombres de las funciones de los módulos, me encontré con este problema, he recibido un error que dice "grupo" no estaba definido. Pronto me di cuenta de que se estaba lanzando la excepción porque p. coincidencia/p. búsqueda devuelve 0 si no hay una cadena coincidente.

Por lo tanto, el operador del grupo no puede funcionar en él. Por lo tanto, para evitar una excepción, verifique si se ha almacenado una coincidencia y luego aplique el operador de grupo.

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 
Cuestiones relacionadas