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)