这里有新鲜出炉的 Python3 Cookbook 中文版,程序狗速度看过来!
Python 是一种面向对象、解释型计算机程序设计语言,由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。Python 语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。
这篇文章主要介绍了 Python 使用中文正则表达式匹配指定中文字符串的方法, 结合实例形式分析了 Python 正则匹配及字符编码相关操作技巧, 需要的朋友可以参考下
本文实例讲述了 Python 使用中文正则表达式匹配指定中文字符串的方法。分享给大家供大家参考,具体如下:
业务场景:
从中文字句中匹配出指定的中文子字符串 . 这样的情况我在工作中遇到非常多, 特梳理总结如下.
难点:
处理 GBK 和 utf8 之类的字符编码, 同时正则匹配 Pattern 中包含汉字, 要汉字正常发挥作用, 必须非常谨慎. 推荐最好统一为 utf8 编码, 如果不是这种最优情况, 也有酌情处理.
往往一个具有普适性的正则表达式会简化程序和代码的处理,使过程简洁和事半功倍,这往往是高手和菜鸟最显著的差别。
示例一:
从 QQ 纯真数据库中解析出省市县等特定词语,这里的正则表达式基本能够满足业务场景,懒惰匹配? 非常必要,因为处理不好,会得不到我们想要的效果。个中妙处,还请各位看官自己琢磨,我这里只点到为止!
代码如下:
- # ! /usr/bin / env python#encoding: utf - 8#description: 从字符串中提取省市县等名称,
- 用于从纯真库中解析解析地理数据import re import sys reload(sys) sys.setdefaultencoding('utf8')#匹配规则必须含有u,
- 可以没有r#这里第一个分组的问号是懒惰匹配,
- 必须这么做PATTERN = \ur '([\u4e00-\u9fa5]{2,5}?(?:省|自治区|市))([\u4e00-\u9fa5]{2,7}?(?:市|区|县|州)){0,1}([\u4e00-\u9fa5]{2,7}?(?:市|区|县)){0,1}'data_list = ['北京市', '陕西省西安市雁塔区', '西班牙', '北京市海淀区', '黑龙江省佳木斯市汤原县', '内蒙古自治区赤峰市', '贵州省黔南州贵定县', '新疆维吾尔自治区伊犁州奎屯市']
- for data in data_list: data_utf8 = data.decode('utf8') print data_utf8 country = data province = ''city = ''district = ''#pattern = re.compile(PATTERN3) pattern = re.compile(PATTERN) m = pattern.search(data_utf8) if not m: print country + '|||'
- continue#print m.group() country = '中国'
- if m.lastindex >= 1 : province = m.group(1) if m.lastindex >= 2 : city = m.group(2) if m.lastindex >= 3 : district = m.group(3) out = '%s|%s|%s|%s' % (country, province, city, district) print out
运行截图
示例二:
从 ip138 中获取指定 ip 的地理位置等信息。
ip138 是我们日常使用较多的 ip 查询网站,我为了获取每个 ip 对应的 isp 信息,需要查询这个页面
我在网上搜索了很久,没有找到 ip138 返回 json 之类的接口,只能以这种方式查询,那么我们不可避免地需要解析出上图中红框标注的 isp 信息。如果使用 DOM 解析指定 div 标签之类的常规思路恐怕不太凑效,更简捷的方式是使用中文正则匹配,直接从返回的 html 中得到 "本站主数据:" 那部分的信息。
下面是我摸索的代码
- # ! /usr/bin / env python#encoding: utf - 8#date: 2016 - 03 - 31#note: 测试中遇到的问题,
- 请求指定的链接会有超时现象,
- 可以多请求几次import requests,
- re import sys reload(sys) sys.setdefaultencoding('utf8') IP138_API = 'http://www.ip138.com/ips138.asp?ip='PATTERN = ur '<li>本站主数据:(.*?)</li>'def query_api(url) : data = ''r = requests.get(url) if r.status_code == 200 : data = r.content
- return data def parse_ip138(html) : #只能是unicode编码,
- 不能在后面再转换为utf - 8,
- 否则无法正则匹配上.html = unicode(html, 'gb2312')#html = unicode(html, 'gb2312').encode('utf-8')#print html pattern = re.compile(PATTERN) m = pattern.search(html) if m: print m.group(1)
- else: print 'regex match failed'
- if __name__ == '__main__': url = IP138_API + '14.192.60.0'resp = query_api(url) if not resp: print 'no content'parse_ip138(resp)
下面是截图
希望本文所述对大家 Python 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0712/320346.html