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将文本转换成图片输出的方法
Apr 28 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
python用plt画图时,cmp设置方法
Dec 13 Python
深入浅析Python中的迭代器
Jun 04 Python
Django发送邮件功能实例详解
Sep 02 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
python如何查看安装了的模块
Jun 23 Python
如何通过命令行进入python
Jul 06 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
python中子类与父类的关系基础知识点
Feb 02 Python
python中if和elif的区别介绍
Nov 07 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
javascript的内存管理详解
2013/08/07 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
JavaScript中字符串拼接的基本方法
2015/07/07 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
2017/06/16 jQuery
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
Node.js控制台彩色输出的方法与原理实例详解
2019/12/01 Javascript
最大K个数问题的Python版解法总结
2016/06/16 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
2018/11/18 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
详解pandas的外部数据导入与常用方法
2019/05/01 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python flask中动态URL规则详解
2019/11/22 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
肯尼迪就职演说稿
2013/12/31 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
2015年维修工作总结
2015/04/25 职场文书
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL