Регулярное выражение не возвращает результаты - PullRequest
1 голос
/ 21 сентября 2019

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

Я очищаю HTML-документ (в частности, RSS-канал), и другие регулярные выражения работают с этим HTML-документом в той же программе, но не с этой конкретной!Я просто в растерянности, так как он работает на regex101.com (и в другой программе на Python, у меня есть доступ к которой был разработан специально для тестирования regex. Мне нужно почистить название статьи, описание и дату / время ееНазвания и работа с датой / временем (пример работы с заголовком ниже), но я не могу напечатать описание (переменная 'snippets').

Что я пробовал:

#There's a 'download' function earlier on which downloads the RSS page to a file
text_in = download(url='https://www.theverge.com/rss/index.xml', target_filename = 'downloadtheverge')
text_in = open('downloadtheverge.xhtml', 'r', encoding="utf8").read()

snippetresults = sorted
(set(findall(r'<p\sid=\"[A-Za-z0-9]*\">([A-Za-z0-9\s\-\—\:\/\,\’\'\‘\?\!\.]*\s?)<\/p>', text_in)))
for snippets in snippetresults:
    print(snippets)

Пример того, что ищется:

<p id="BjKuOh">Only a single key change isn’t being reversed: YouTube will actually verify that channels are authentic, whereas in the past it seemingly has not thoroughly taken this very obvious step.</p>

Что возвращается из регулярного выражения на regex101.com:

'Только одно изменение ключа не отменяется: YouTube фактически проверит подлинность каналов, в то время как в прошлом он, по-видимому, не делал этого очевидного шага полностью.'

Что работает:

titlesresults = sorted
(set(findall(r'<title>([A-Za-z0-9\s\-\—\:\/\,\’\'\‘\?\!\.]+\s?)<\/title>', text_in)))
for titles in titlesresults:
    print(titles)

Тот же формат, возвращает заголовки в HTML-документе в окно оболочки, например так: «Наушники Beats получат такой же обмен аудио в iOS 13.1функция AirPods необновить до iOS 13.0, если вы играете в Fortnite или PUBG Mobile и т. д. и т. д.

Тем не менее, когда я запускаю его в своей программе, используя 'сниппеты', окно оболочки ничего не возвращает ... Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 21 сентября 2019

Это не работает:

from re import findall
from urllib import request

text_in = request.urlopen(url='https://www.theverge.com/rss/index.xml').read().decode()

snippetresults = sorted(set(findall(r'<p\sid=\"[A-Za-z0-9]*\">([A-Za-z0-9\s\-\—\:\/\,\’\'\‘\?\!\.]*\s?)<\/p>', text_in)))
for snippets in snippetresults:
    print(snippets)

Но это работает (обратите внимание на HTML-сущности):

from re import findall
from urllib import request

text_in = request.urlopen(url='https://www.theverge.com/rss/index.xml').read().decode()

snippetresults = sorted(set(findall(r'&lt;p\sid=\"[A-Za-z0-9]*\"&gt;([A-Za-z0-9\s\-\—\:\/\,\’\'\‘\?\!\.]*\s?)&lt;\/p&gt;', text_in)))
for snippets in snippetresults:
    print(snippets)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...