Saltar al contenido

¿Cómo busco un patrón dentro de un archivo de texto usando Python combinando operaciones de expresión regular y cadena / archivo y almacenamiento de instancias del patrón?

Solución:

import re
pattern = re.compile("<(d{4,5})>")

for i, line in enumerate(open('test.txt')):
    for match in re.finditer(pattern, line):
        print 'Found on line %s: %s' % (i+1, match.group())

Un par de notas sobre la expresión regular:

  • No necesitas el ? al final y al exterior (...) si no desea hacer coincidir el número con los corchetes angulares, pero solo desea el número en sí
  • Coincide con 4 o 5 dígitos entre los corchetes angulares

Actualizar: Es importante entender que el fósforo y capturar en una expresión regular puede ser bastante diferente. La expresión regular en mi fragmento de arriba coincide con el patrón con paréntesis angulares, pero pido capturar solo el número interno, sin los corchetes angulares.

Puede encontrar más información sobre las expresiones regulares en Python aquí: CÓMO de expresiones regulares

Haciéndolo en una sola lectura masiva:

import re

textfile = open(filename, 'r')
filetext = textfile.read()
textfile.close()
matches = re.findall("(<(d{4,5})>)?", filetext)

Linea por linea:

import re

textfile = open(filename, 'r')
matches = []
reg = re.compile("(<(d{4,5})>)?")
for line in textfile:
    matches += reg.findall(line)
textfile.close()

Pero nuevamente, las coincidencias que devuelven no serán útiles para nada excepto para contar, a menos que agregue un contador de compensación:

import re

textfile = open(filename, 'r')
matches = []
offset = 0
reg = re.compile("(<(d{4,5})>)?")
for line in textfile:
    matches += [(reg.findall(line),offset)]
    offset += len(line)
textfile.close()

Pero todavía tiene más sentido leer todo el archivo a la vez.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *