为什么不能在python中使用“正则表达式”匹配中文字符?

时间:2017-07-09 05:40:31

标签: python regex

 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
 []

如上所述为什么我的代码不能匹配中文字符?

1 个答案:

答案 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)

输出将符合要求。