Je traverse des lignes dans un fichier texte en utilisant un script python
. Je souhaite rechercher une balise img
dans le document texte et la renvoyer sous forme de texte.
Quand je lance la regex re.match(line)
, il retourne un _sre.SRE_MATCH
objet. Comment puis-je le faire renvoyer une chaîne?
import sys
import string
import re
f = open("sample.txt", 'r' )
l = open('writetest.txt', 'w')
count = 1
for line in f:
line = line.rstrip()
imgtag = re.match(r'<img.*?>',line)
print("yo it's a {}".format(imgtag))
Lorsqu'il est exécuté, il imprime:
yo it's a None
yo it's a None
yo it's a None
yo it's a <_sre.SRE_Match object at 0x7fd4ea90e578>
yo it's a None
yo it's a <_sre.SRE_Match object at 0x7fd4ea90e578>
yo it's a None
yo it's a <_sre.SRE_Match object at 0x7fd4ea90e578>
yo it's a <_sre.SRE_Match object at 0x7fd4ea90e5e0>
yo it's a None
yo it's a None
Vous devriez utiliser re.MatchObject.group(0)
. Comme
imtag = re.match(r'<img.*?>', line).group(0)
Modifier:
Vous feriez peut-être mieux de faire quelque chose comme
imgtag = re.match(r'<img.*?>',line)
if imtag:
print("yo it's a {}".format(imgtag.group(0)))
éliminer tous les None
s.
Étant donné qu'il pourrait y avoir plusieurs balises img
, je recommanderais re.findall
:
import re
with open("sample.txt", 'r') as f_in, open('writetest.txt', 'w') as f_out:
for line in f_in:
for img in re.findall('<img[^>]+>', line):
print >> f_out, "yo it's a {}".format(img)
imgtag.group(0)
ou imgtag.group()
. Cela renvoie la correspondance entière sous forme de chaîne. Vous ne capturez rien d'autre non plus.
Notez que re.match(pattern, string, flags=0)
ne renvoie que les correspondances au début de la chaîne. Si vous voulez localiser une correspondance n'importe où dans la chaîne, utilisez plutôt re.search(pattern, string, flags=0)
(- https://docs.python.org/3/library/re.html ). Cela va scanner la chaîne et retourner le premier objet de correspondance. Ensuite, vous pouvez extraire la chaîne correspondante avec match_object.group(0)
comme suggéré par les gens.