Возникли проблемы с Python Regex: печать «None» при печати «спичками». Regex работает в тестере - PullRequest
0 голосов
/ 10 февраля 2020

Я должен извлечь группы текста из файла со списком топ десять: имя, звание, и др c. для каждого. Вы можете увидеть файл и регулярное выражение здесь https://regex101.com/r/fXK5YV/1. Он работает там, и вы можете увидеть перехвата группы.

import re

pattern = '''
    (?P<list><li\sclass="regular-search-result">(.|\n)*?(?<=\<span class=\"indexed-biz-name\"\>)
    (?P<rank>\d{1,2})
    (.|\n)*?\<span\>
    (?P<name>.+)
    \<\/span\>(.|\n)*?alt=\"
    (?P<stars>\d\.\d)
    \sstar\srating\"(.|\n)*?\<span class=\"review-count rating-qualifier\"\>(\s|\t|\n)*?
    (?P<numrevs>\d{1,7})(.|\n)*?\<span\sclass=\"business-attribute\sprice-range\">
    (?P<price>\${1,6})
    \<\/span\>(.|\n)*?<\/li>)  
'''

pattern_matcher = re.compile(pattern, re.VERBOSE)

matches = pattern_matcher.match(yelp_html)

Эта печать None.

1009 * Существует, безусловно, текст внутри yelp_html. 1012 * Что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020
import re

pattern = r'''
     (?P<list><li\sclass=\"regular-search-result\">(.|\n)*?(?<=\<span\sclass=\"indexed-biz-name\"\>)
     (?P<rank>\d{1,2})
     (.|\n)*?\<span\>
     (?P<name>.+)
     \<\/span\>(.|\n)*?alt=\"
     (?P<stars>\d\.\d)
     \sstar\srating\"(.|\n)*?\<span\sclass=\"review-count\srating-qualifier\"\>(\s|\t|\n)*?
     (?P<numrevs>\d{1,7})
     (.|\n)*?\<span\sclass=\"business-attribute\sprice-range\">
     (?P<price>\${1,6})
     \<\/span\>(.|\n)*?<\/li>)
'''

pattern_matcher = re.compile(pattern, re.VERBOSE)

matches = pattern_matcher.finditer(yelp_html)

for item in matches:
    print(item.group('rank', 'name', 'stars', 'numrevs', 'price'))
0 голосов
/ 10 февраля 2020

Я вижу две проблемы:

  1. Вы не используете строка (префикс строки с r), что означает, что ваши обратные косые будут пытаться представлять особые вещи вместо того, чтобы быть частью строки.

  2. Я полагаю, что ваша многострочная строка будет пытаться сопоставить как новые строки между каждой строкой, так и пробелы в начале строки в ваше регулярное выражение (что вы не хотите, учитывая, что это не то, как регулярное выражение отформатировано в вашей ссылке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...