正则表达式的中文搜索
近几日致力于探索爬虫技术,并试图从收集回来的文字中识别出中文内容。顺便学习了一些正则表达式的基础知识。没有想到按照惯例般的侯门依旧深不可测。
关于正则表达式的事迹广为流传着一个有趣的故事:一位程序员在遇到问题时试图用正则表达式来解决它。现在他遇到了更大的挑战。(实用正则确实会带来新的问题而最初的困扰依然存在)
还有这样一个笑话:给一个程序员正则表达式,他将用来去识别出异常字符;通过教导他如何正确使用正则表达式,你的结果将会是一个充满问题的人.
(原谅我这生硬的翻译。)
通过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
