2011-05-31 8 views
7

Intenté utilizar un título diferente para la pregunta, pero si puede mejorar la pregunta, hágalo.Python - Cómo usar la expresión regular en el archivo, línea por línea, en Python

Aquí es mi expresión regular: f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)

tendría que aplicar esto en un archivo, línea por línea. La línea por línea está bien, lectura simple del archivo y un ciclo. Pero, ¿cómo aplico la expresión regular a las líneas?

Gracias por toda la ayuda, y lo siento por la pregunta de novato.

Respuesta

1

use import re, luego re.compile() con su patrón como argumento, y use el atributo del objeto resultante match en cada línea. algo como esto ..

import re 
pat = re.compile(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)') 
for line in file: 
    # use pat.match, pat.search .. etc 
7

Puede probar algo como esto:

import re 
regex = re.compile("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)") 
with open("my_file.txt") as f: 
    for line in f: 
     result = regex.search(line) 
7
import re 
with open('file.txt') as f: 
    for line in f: 
     match = re.search('f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)', line) 

Tenga en cuenta que Python recopila y almacena en caché la expresión regular, por lo que no se requiere una etapa de compilación separada en este caso de forma automática .

13

La siguiente expresión devuelve una lista; cada entrada de esa lista contiene todas las coincidencias de su expresión regular en la línea respectiva.

>>> import re 
>>> [re.findall(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line) 
      for line in open('file.txt')] 
+0

Incluso si su respuesta es muy cercana a la de Cédric Julien, no tengo votó el suyo debido a la lista de comprensión y la explicación – dlewin

0

he utilizado este abordaje:

import re 
#Define the search term: 
pattern = f\(\s*([^,]+)\s*,\s*([^,]+)\s*\) 

#Create an empty list: 
data = [] 

#then 

for line in open(r'file.txt'): 
    if line !='': #<-- To make sure the whole file is read 
     word = re.findall(pattFinder1, line) 
     data.append(str(word)) 
2

Otra forma de hacer

import re 
[line for line in open('file.txt') if re.match(r'f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)',line)] 
0
for line in file: 
    line = re 
      .match("f\(\s*([^,]+)\s*,\s*([^,]+)\s*\)",line) 
      .group(0) 
Cuestiones relacionadas