import re
html="""<div class="tB-mb">
<span class="t-d">0</span>
<span class="t-d">0</span> 天
<span class="t-h">0</span>
<span class="t-h">0</span> 时
<span class="t-m">0</span>
<span class="t-m">0</span> 分
<span class="t-s">0</span>
<span class="t-s">0</span> 秒
"""
tmp=re.compile(u"(<div class='tB-mb'>).*?([\u4e00-\u9fa5]).*?",re.U)
result=re.findall(tmp,html.decode("utf-8"))
print result
[]
如上所述为什么我的代码不能匹配中文字符?
答案 0 :(得分:2)
Yuu在<div class='tB-mb'>
中使用单引号作为正则表达式模式,而html
在双引号中使用div
&#39; s class
。我认为这是一个更简单的模式,可以提取你想要的东西:
tmp = re.compile(u"(?m)([\u4e00-\u9fa5])+", re.U)
result=re.findall(tmp,html)
print result
输出:
['天', '时', '分', '秒']
如果您的html
大于问题中显示的内容,并且您只想要<div class="tB-mb">
中的中文字符,则可以先在div
中提取文字,然后再搜索在那个文本里面:
inside_text = re.search(r'<div class="tB-mb">[\s\S]+</div>', html).group()
result = re.findall(tmp,inside_text)
输出将符合要求。