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编程模板汇总
Feb 12 Python
python学生信息管理系统(初级版)
Oct 17 Python
Python实现多属性排序的方法
Dec 05 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python实现点击按钮修改数据的方法
Jul 17 Python
Python队列、进程间通信、线程案例
Oct 25 Python
python标准库os库的函数介绍
Feb 12 Python
Django接收照片储存文件的实例代码
Mar 07 Python
详解Flask前后端分离项目案例
Jul 24 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 Python
python 实现aes256加密
Nov 27 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
jQuery UI的Dialog无法提交问题的解决方法
2011/01/11 Javascript
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
jquery访问ashx文件示例代码
2014/08/11 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
Js中async/await的执行顺序详解
2017/09/22 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
python解析xml模块封装代码
2014/02/07 Python
Python压缩和解压缩zip文件
2015/02/14 Python
python检查指定文件是否存在的方法
2015/07/06 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python中异常报错处理方法汇总
2016/11/20 Python
python中模块查找的原理与方法详解
2017/08/11 Python
pytorch中index_select()的用法详解
2021/01/06 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
5分钟实现Canvas鼠标跟随动画背景
2019/11/18 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
党员干部反四风民主生活会对照检查材料思想汇报
2014/10/12 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
2019班干部竞选演讲稿范本!
2019/07/08 职场文书
php+laravel 扫码二维码签到功能
2021/05/15 PHP
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python