Распечатать соответствие RegEx файлу Python

прежде всего: я знаю, что вам не следует использовать RegEx для анализа HTML, потому что снаружи есть много хороших парсеров, таких как BS4 или lxml. Однако, поскольку у меня нет хорошо написанных файлов HTML, я не могу искать тег или что-то еще, чтобы извлечь мой текст HTML.

Мой код частично работает так, как я хочу, но кажется, что он останавливается случайным образом после того, как он соответствует моему регулярному выражению.

import glob
import os
import re
import contextlib


@contextlib.contextmanager
def stdout2file(fname):
    import sys
    f = open(fname, 'w')
    sys.stdout = f
    yield
    sys.stdout = sys.__stdout__
    f.close()


def extractor():
    os.chdir(r"F:\Test")  # the directory containing html
    with stdout2file("Test.txt"):
        for file in glob.iglob("*.html"):  # iterates over all files in the directory ending in .html
            with open(file, encoding="utf8") as f:
                contents = f.read()
                regex = re.compile(r'The interesting part begins.*?and for sure there is no other reason', re.S)
                extract = regex.search(contents)
                if re.search(regex, contents) is not None:
                    print(file.split(os.path.sep)[-1], end="| ")
                    print(extract)

extractor()

Мой вывод, который я получаю:

Thisismyfirsthtmlfile.html| <_sre.SRE_Match object; span=(75794, 93039), match='The interesting part begins with the notes of Secul>

Таким образом, оно внезапно останавливается внутри слова Secul (обратите внимание, что полное слово будет светским). Попробовав несколько часов с разными решениями, я не могу понять, что я мог пропустить?

Есть идеи по этому поводу?


person Florian Schramm    schedule 28.07.2016    source источник
comment
опубликуйте актуальные данные   -  person Avinash Raj    schedule 28.07.2016
comment
похоже, что repr(match) обрезается, возможно, он соответствует всему, что вы хотели - подделка заключается в том, что он говорит match='... без закрывающей одинарной кавычки перед >.   -  person Keith Hall    schedule 28.07.2016
comment
Замените if re.search(regex, contents) is not None: на if extract: и получите доступ к нужному значению через extract.group().   -  person Wiktor Stribiżew    schedule 28.07.2016
comment
Результатом вызова regex.search является не строка, а объект SRE_Match. Вы хотите extract.group(0).   -  person 2ps    schedule 28.07.2016
comment
@2ps: Спасибо за ваше решение, это была проблема! Не могли бы вы кратко объяснить, как работает группа (0)?   -  person Florian Schramm    schedule 28.07.2016
comment
@WiktorStribiżew: Это тоже не сработало...   -  person Florian Schramm    schedule 28.07.2016
comment
@FlorianSchramm: все работает нормально.   -  person Wiktor Stribiżew    schedule 28.07.2016
comment
group() получает доступ к значению совпадения. group(0) делает то же самое. См. ссылку re: Без аргументов, group1 по умолчанию равен нулю (возвращается все совпадение).   -  person Wiktor Stribiżew    schedule 28.07.2016
comment
@WiktorStribiżew: Извините, вы правы. Я пропустил расширение извлечения с помощью .Group(). Так что да, ваше решение также отлично работает! Спасибо за краткое объяснение group().   -  person Florian Schramm    schedule 28.07.2016