我有以下字符串:
s = '''
<a class="biz-name"><span>Gus’s World Famous Fried Chicken</span></a>
<a class="biz-name"><span>South City Kitchen - Midtown</span></a>
'''
我试图在<span>
之间匹配这两个组
使用以下
regex = re.compile('<a class="biz-name[\w\W]*<span>(.*)</span>')
regex.findall(s)
期望值:
['Gus’s World Famous Fried Chicken', 'South City Kitchen - Midtown']
实际
['South City Kitchen - Midtown']
为什么只匹配最后一个事件?你知道吗
You shouldn't parse xml with regex。也就是说,regex的greedyness让你,
[\w\W]*
几乎匹配任何东西,所以它会吃掉第一个表达式。你知道吗添加一个非贪婪的
?
标记([\w\W]*?
)修复了这个问题。在小组里加一个也没什么坏处。我已经用.*?
替换了[\w\W]*?
,因为它更简单、更等价。你知道吗在regex101上看到这个。你知道吗
正则表达式通常不是最好的清除HTML的方法。例如,另一种方法是使用
BeautifulSoup
:输出:
但是,一个简单的正则表达式解决方案:
输出:
相关问题 更多 >
编程相关推荐