Использование регулярных выражений для обнаружения слов, которые могут иметь апостроф, закодированный в ASCII? - PullRequest
0 голосов
/ 28 января 2020

Работая в Python, я пытаюсь создать функцию, которая принимает тикер в виде строки и возвращает название компании, используя html данные, полученные из Yahoo! Финансы. У меня это работает для всех компаний, кроме одной, которая содержит апостроф. Я проверил код html и обнаружил, что апостроф закодирован как таковой - я уверен, что он закодирован в ASCII. Вот модифицированная версия html кода:

 html = '<!DOCTYPE html><html id="atomic" class="NoJs featurephone" lang="en-US"><head prefix="og: http://ogp.me/ns#"><script>window.performance && window.performance.mark && window.performance.mark(\'PageStart\');</script><meta charset="utf-8"/><title>Dick&#x27;s Inc (DKS) Company Profile &amp; Facts'

То, что я хотел бы вернуть, это "Дика". То, что я получаю, это просто "Дик". Я использую модуль re и re.search. Вот мой код:

 company_name = (re.search(r'(?<=</script><meta charset="utf-8"/><title>)\w+', html).group(0))

Я пытался включить апостроф, чтобы убедиться, что он не останавливается на достигнутом, но, поскольку он не является частью кода html, он нигде его не находит , Должен ли я использовать что-то кроме re.search? Я посмотрел на re.findall, но это не решило бы мою проблему с поиском и включением «», но представляло собой апостроф.

1 Ответ

1 голос
/ 28 января 2020

Конечно, вы не хотите Dick's, Inc (DKS) или что-то еще? Просто удивляйтесь, если вы получаете полные имена, как ожидалось. Чтобы получить Dick's, вам нужно удалить свой HTML, а затем изменить свое регулярное выражение. Новый будет искать один или несколько слов или апострофов в последовательности.

import html

html_string = '<!DOCTYPE html><html id="atomic" class="NoJs featurephone" lang="en-US"><head prefix="og: http://ogp.me/ns#"><script>window.performance && window.performance.mark && window.performance.mark(\'PageStart\');</script><meta charset="utf-8"/><title>Dick&#x27;s Inc (DKS) Company Profile &amp; Facts'
html_string = html.unescape(html_string)
company_name = (re.search(r'(?<=</script><meta charset="utf-8"/><title>)[\w\']+', html_string).group(0))

Результат:

"Dick's"
...