I am LAZY bones ? all linux

python里强大的re模块

今天遇到一个小问题,用脚本把某web页面抓取下来时,里面的中文都是类似”帮助”这样的格式.这当然不是我想要的,我需要把它转化为可读的汉字.
为了解决这个问题,首先要用到内建函数unichr:
unichr(24110) 能得到”帮”字, unichr(21161) 能到”助”字,问题是我怎么批量吧html里面的所有 &#nnnnn; 替换掉呢?
干这类事情当然需要正则表达式了,于是,去翻re的文档,还真让我给找到了,方法如下:

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
 
str='<a href="/music/html/faq.html">&#24110;&#21161;</a>'
def unistr(m):
    return unichr(int(m.group(0)[2:-1]))
 
print re.sub(r'&#[0-9]{5};',unistr,str)

运行这段示例代码就可以得到我想要的结果了,哈哈.
觉得python的这个re好强大,居然替换字符串还可以是个函数…太佩服这个设计了.

最后修改时间: 2009年04月01日 23:21

本文章发表于: 2009年04月01日 23:21 | 所属分类:备忘. | 您可以在此订阅本文章的所有评论. | 您也可以发表评论, 或从您的网站trackback.

7 个评论 关于: “python里强大的re模块”

  1. shellex 在 2009年04月02日 00:48 说:回复

    很多语法糖,好玩

  2. shellex 在 2009年04月02日 00:49 说:回复

    很多语法糖,好玩。呵呵

    • bones7456 在 2009年04月02日 08:17 说:回复

      你个夜猫子..不睡觉啊?

  3. TualatriX 在 2009年04月02日 09:22 说:回复

    很好很强大!继续学习Python。

  4. dreamer 在 2009年04月11日 13:58 说:回复

    你的那个抓取Web页面的脚本也是用Python写的么?

    中文处理可以参考一下这里的,当时偶还研究了一番,现在又忘光了

    http://wiki.woodpecker.org.cn/moin/PyInChinese

    • bones7456 在 2009年04月12日 16:57 说:回复

      恩,这个目前是纯python的程序,包括web抓取和下载.
      你说的那个页面貌似比较乱,可能讲的是老版本的python?我这倒没遇到什么中文问题,不管是在linux下还是在win下.

  5. 【转】python的正则表达式 re | 石磊的博客 在 2016年01月04日 16:46 说:回复

    […] re.sub(pattern, repl, string[, count]) 替换,将string里,匹配pattern的部分,用repl替换掉,最多替换count次(剩余的匹配将不做处理),然后返回替换后的字符串。如果string里没有可以匹配pattern的串,将被原封不动地返回。repl可以是一个字符串,也可以是一个函数(也可以参考我以前的例子)。如果repl是个字符串,则其中的反斜杆会被处理过,比如 n 会被转成换行符,反斜杆加数字会被替换成相应的组,比如 6 表示pattern匹配到的第6个组的内容。 例子: […]

发表评论