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使用urllib2模块获取gravatar头像实例
Dec 18 Python
python列表操作使用示例分享
Feb 21 Python
20个常用Python运维库和模块
Feb 12 Python
Django中使用第三方登录的示例代码
Aug 20 Python
Python实现常见的回文字符串算法
Nov 14 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 Python
Python Tkinter Entry和Text的添加与使用详解
Mar 04 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 Python
python 制作磁力搜索工具
Mar 04 Python
python字典的元素访问实例详解
Jul 21 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
is_uploaded_file函数引发的不能上传文件问题
2013/10/29 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
探讨:JavaScript ECAMScript5 新特性之get/set访问器
2016/05/05 Javascript
Bootstrap插件全集
2016/07/18 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
在node中如何使用 ES6
2017/04/22 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
VUE实现表单元素双向绑定(总结)
2017/08/08 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
2018/06/05 jQuery
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
js实现简单扫雷
2020/11/27 Javascript
python时间整形转标准格式的示例分享
2014/02/14 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
Python 实现一行输入多个值的方法
2018/04/21 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
Python多分支if语句的使用
2020/09/03 Python
Python 实现微信自动回复的方法
2020/09/11 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
促销活动总结范文
2014/04/30 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2014年基建工作总结
2014/12/12 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年大学辅导员工作总结
2015/05/12 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python中的套接字编程是什么?
2021/06/21 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android