Подтвердить что ты не робот

Как вернуть строку из регулярного выражения в python?

Я запускаю строки в текстовом файле, используя python script. Я хочу найти тег img в текстовом документе и вернуть тег в виде текста.

Когда я запустил regex re.match(line), он возвращает объект _sre.SRE_MATCH. Как мне вернуть строку?

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 a {}".format(imgtag))

При запуске он печатает:

yo it a None
yo it a None
yo it a None
yo it a <_sre.SRE_Match object at 0x7fd4ea90e578>
yo it a None
yo it a <_sre.SRE_Match object at 0x7fd4ea90e578>
yo it a None
yo it a <_sre.SRE_Match object at 0x7fd4ea90e578>
yo it a <_sre.SRE_Match object at 0x7fd4ea90e5e0>
yo it a None
yo it a None
4b9b3361

Ответ 1

Вы должны использовать re.MatchObject.group(0). Как

imtag = re.match(r'<img.*?>', line).group(0)

Edit:

Вам также может быть полезно сделать что-то вроде

imgtag  = re.match(r'<img.*?>',line)
if imtag:
    print("yo it a {}".format(imgtag.group(0)))

чтобы устранить все None s.

Ответ 2

Учитывая, что может быть несколько тегов img, я рекомендовал бы 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 a {}".format(img)

Ответ 4

Обратите внимание, что re.match(pattern, string, flags=0) возвращает только совпадения в начале строки. Если вы хотите найти совпадение в любом месте строки, используйте re.search(pattern, string, flags=0) (https://docs.python.org/3/library/re.html). Это сканирует строку и возвращает первый объект соответствия. Затем вы можете извлечь соответствующую строку с помощью match_object.group(0), как это было предложено.