Python使用中文正则表达式匹配指定中文字符串的方法示例


Posted in Python onJanuary 20, 2017

本文实例讲述了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

运行截图

Python使用中文正则表达式匹配指定中文字符串的方法示例

示例二:

从ip138中获取指定ip的地理位置等信息。

ip138是我们日常使用较多的ip查询网站,我为了获取每个ip对应的isp信息,需要查询这个页面

Python使用中文正则表达式匹配指定中文字符串的方法示例

我在网上搜索了很久,没有找到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使用中文正则表达式匹配指定中文字符串的方法示例

Python 相关文章推荐
jupyter安装小结
Mar 13 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
May 17 Python
pandas 数据实现行间计算的方法
Jun 08 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
代码实例讲解python3的编码问题
Jul 08 Python
Python分割训练集和测试集的方法示例
Sep 19 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 Python
python 查找字符串是否存在实例详解
Jan 20 #Python
python django 访问静态文件出现404或500错误
Jan 20 #Python
python中实现迭代器(iterator)的方法示例
Jan 19 #Python
Python正则替换字符串函数re.sub用法示例
Jan 19 #Python
Python中二维列表如何获取子区域元素的组成
Jan 19 #Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 #Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 #Python
You might like
php4的session功能评述(三)
2006/10/09 PHP
php目录管理函数小结
2008/09/10 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
2012/06/17 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
JavaScript基本编码模式小结
2012/05/23 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound的解决方法
2017/01/19 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
Vue.js devtool插件安装后无法使用的解决办法
2017/11/27 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
微信小程序使用二次贝塞尔曲线画波浪
2018/12/25 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
Python快速排序算法实例分析
2017/11/29 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
Django model select的多种用法详解
2019/07/16 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
HTML5 本地存储之如果没有数据库究竟会怎样
2013/04/25 HTML / CSS
挂职学习心得体会
2014/09/09 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
2016中秋节广告语
2016/01/28 职场文书
PHP中->和=>的意思
2021/03/31 PHP
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL