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 tempfile模块学习笔记(临时文件)
May 25 Python
Python2.x中文乱码问题解决方法
Jun 02 Python
python去除空格和换行符的实现方法(推荐)
Jan 04 Python
Python中list查询及所需时间计算操作示例
Jun 21 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
python中实现控制小数点位数的方法
Jan 24 Python
python抓取需要扫微信登陆页面
Apr 29 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
python内存动态分配过程详解
Jul 15 Python
python导入不同目录下的自定义模块过程解析
Nov 18 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
Mar 19 Python
Python实现自动签到脚本功能
Aug 20 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删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
从wamp到xampp的升级之路
2015/04/08 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
Jquery选择器 $实现原理
2009/12/02 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
JavaScript Array对象扩展indexOf()方法
2014/05/09 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
python 网络编程常用代码段
2016/08/28 Python
Python实现pdf文档转txt的方法示例
2018/01/19 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Python实现网站表单提交和模板
2019/01/15 Python
PyTorch的Optimizer训练工具的实现
2019/08/18 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
综合办公室个人的自我评价
2013/12/22 职场文书
成品仓管员工作职责
2013/12/29 职场文书
珠宝店促销方案
2014/03/21 职场文书
导师工作推荐信范文
2014/05/17 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
葬礼主持词
2015/07/02 职场文书
2015年国庆节寄语
2015/08/17 职场文书
Android Flutter实现图片滑动切换效果
2022/04/07 Java/Android