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 相关文章推荐
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
python获取标准北京时间的方法
Mar 24 Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
使用C++扩展Python的功能详解
Jan 12 Python
Anaconda下安装mysql-python的包实例
Jun 11 Python
python实现五子棋人机对战游戏
Mar 25 Python
python获取引用对象的个数方式
Dec 20 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
Nov 30 Python
Python 随机按键模拟2小时
Dec 30 Python
python 模块重载的五种方法
Apr 24 Python
Python之matplotlib绘制折线图
Apr 13 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
计算php页面运行时间的函数介绍
2013/07/01 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
CI框架Session.php源码分析
2014/11/03 PHP
基于php编程规范(详解)
2017/08/17 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
JavaScript解八皇后问题的方法总结
2016/06/12 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
Vue异步加载about组件
2017/10/31 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
快速了解python leveldb
2018/01/18 Python
python微信跳一跳游戏辅助代码解析
2018/01/29 Python
python实现支付宝转账接口
2019/05/07 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
python并发编程多进程 互斥锁原理解析
2019/08/20 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
大专应届生个人简历的自我评价
2013/10/15 职场文书
电台编导求职信
2014/05/06 职场文书
社会实践的活动方案
2014/08/22 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
第一书记观后感
2015/06/08 职场文书
在职证明书模板
2015/06/15 职场文书
小型婚礼主持词
2015/06/30 职场文书
教师培训学习心得体会
2016/01/21 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书