Python正则表达式有问题:打印“匹配项”时打印“无”。正则表达式在测试仪中工作

2024-06-11 23:00:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该从一个文件中提取文本组,每个文件都有一个前十名列表:名称、排名等。您可以在这里看到文件和正则表达式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

yelp_html中肯定有文本

我做错了什么


Tags: 文件namehttps文本re名称列表html
2条回答

我看到两个问题:

  1. 您没有使用原始字符串(在字符串前面加上r),这意味着您的反斜杠将试图表示特殊的内容,而不是字符串的一部分

  2. 我相信您的多行字符串将尝试将每行之间的换行符和字符串开头的空格匹配到您的正则表达式中(这是您不想要的,因为这不是链接中正则表达式的格式)

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'))

相关问题 更多 >