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防止302跳转的代码例子
Jul 07 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
Python上传package到Pypi(代码简单)
Feb 06 Python
python检查URL是否正常访问的小技巧
Feb 25 Python
Python pymongo模块用法示例
Mar 31 Python
python实现AES加密与解密
Mar 28 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
Django 限制访问频率的思路详解
Dec 24 Python
django admin 添加自定义链接方式
Mar 11 Python
PyQt5 QDockWidget控件应用详解
Aug 12 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
利用Python实现最小二乘法与梯度下降算法
Feb 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
php二分查找二种实现示例
2014/03/12 PHP
PHP处理会话函数大总结
2015/08/05 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
JavaScript与Div对层定位和移动获得坐标的实现代码
2010/09/08 Javascript
自己动手开发jQuery插件教程
2011/08/25 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
微信小程序 toast 详解及实例代码
2016/11/09 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
JS常用知识点整理
2017/01/21 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
vue实现标签云效果的示例
2020/11/09 Javascript
Python实现导出数据生成excel报表的方法示例
2017/07/12 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
python动态视频下载器的实现方法
2019/09/16 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
Python 实现自动登录+点击+滑动验证功能
2020/06/10 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
幼儿师范毕业生自荐信
2013/11/09 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
大学校务公开实施方案
2014/03/31 职场文书
高三语文复习计划
2015/01/19 职场文书
导游词之青城山景区
2019/09/27 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏