Advertisement

正则表达式的中文搜索

阅读量:

近几日致力于探索爬虫技术,并试图从收集回来的文字中识别出中文内容。顺便学习了一些正则表达式的基础知识。没有想到按照惯例般的侯门依旧深不可测。

关于正则表达式的事迹广为流传着一个有趣的故事:一位程序员在遇到问题时试图用正则表达式来解决它。现在他遇到了更大的挑战。(实用正则确实会带来新的问题而最初的困扰依然存在)

还有这样一个笑话:给一个程序员正则表达式,他将用来去识别出异常字符;通过教导他如何正确使用正则表达式,你的结果将会是一个充满问题的人.

(原谅我这生硬的翻译。)

通过so.com查询关键字,会得到一个utf-8 编码的字符串,当查询科技的时候:

复制代码

我们的目标是那个后续的字典。然而直接转换或像split这样简单的办法都不奏效。因此必须采用正则表达式来进行匹配。

很显然,我们想要的是每个“ ”中间的中文。我去网上查中文的匹配,发现每篇文章都一样,只是提了中文的utf-8的范围:

unicode中中文的编码为\u4e00-\u9fa5

最让我失望的是,谷歌的第一页的中文文章几乎都一模一样。

于是我就直接去匹配中文,正则表达式如下:

""[\u4e00-\u9fa5]+""

让我们来了解这些外面的双引号表示这是一个字符串。其中这个'会被转义以使其保持原有的意义。

方括号内\u代表的是Unicode编码中的一个单元格,在Unicode字符编码体系中,4e00至9fa5这个区间涵盖了所有的中文字符编码范围。方括号中的内容表明,在4e00到9fa5之间的编码都属于汉字字符编码的范畴。

后面的+指的是前面那个表达式的一个或多个,也就是中括号内的一个或多个。

通过实验分析得出大量冒号字符频繁出现。经过长时间反复思考后仍无法理解原因。采用冒号命名策略以避免潜在问题。

html_code = html.decode('utf8')

再搜索,发现只搜出了空集。

*****经过了很久很久******

后来发现字符串也需要标注是unicode

u""[\u4e00-\u9fa5]+""

问题得到了满意地解决。然而搜索得到的结果中仍带有引号。我的需求仅限于从中提取关键的词语。那么具体操作就是将需要提取的词语用括号标出即可完成任务。

u""([\u4e00-\u9fa5]+)""

代码是这个样子的:

复制代码
 html_code = html.decode('utf8')

    
     pattern = re.compile(u"\"([\u4e00-\u9fa5]+)\"")
    
     results = pattern.findall(html_code)
    
     for result in results:
    
     print "%s" %result

结果是:

复制代码
 科技

    
 科技美学
    
 科技苑
    
 科技小制作大全
    
 科技管理研究
    
 科技网
    
 科技少女喵
    
 科技部
    
 科技日报
    
 科技超能王
    
 科技皇朝

PS:其实没必要写这篇文章啊!实在受不了了呢!等我抽身的时候(或者说是离开的时候),一定要静下心来深入学习正则表达式。

github主页: _https://github.com/gt11799_

E-mail: gting405@163.com

全部评论 (0)

还没有任何评论哟~