Python使用中文正则表达式匹配指定中文字符串的方法示例
发布时间 - 2026-01-10 22:39:38 点击率:次本文实例讲述了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
运行截图
示例二:
从ip138中获取指定ip的地理位置等信息。
ip138是我们日常使用较多的ip查询网站,我为了获取每个ip对应的isp信息,需要查询这个页面
我在网上搜索了很久,没有找到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)
下面是截图
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools./regex/javascript
正则表达式在线生成工具:
http://tools./regex/create_reg
更多关于Python相关内容可查看本站专题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 中文
# 正则表达式
# 匹配
# 字符串
# python OpenCV的imread不能读取中文路径问题及解决
# Python OpenCV读取中文路径图像的方法
# python3+openCV 获取图片中文本区域的最小外接矩形实例
# Python OpenCV实现图片上输出中文
# python统计中文字符数量的两种方法
# 解决Python下json.loads()中文字符出错的问题
# Python判断中文字符串是否相等的实例
# Python实现简单截取中文字符串的方法
# python 解决OpenCV显示中文字符的方法汇总
# 奎屯市
# 北京市
# 佳木斯市
# 赤峰市
# 新疆维吾尔自治区
# 酌情处理
# 贵州省
# 贵定县
# 内蒙古自治区
# 汤原县
# 进阶
# 西安市
# 操作技巧
# 陕西省
# 也有
# 黑龙江省
# 会有
# 我在
# 菜鸟
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
制作旅游网站html,怎样注册旅游网站?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel如何实现用户密码重置功能?(完整流程代码)
如何在云指建站中生成FTP站点?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
nodejs redis 发布订阅机制封装实现方法及实例代码
大连 网站制作,大连天途有线官网?
Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】
linux top下的 minerd 木马清除方法
Laravel如何处理和验证JSON类型的数据库字段
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Python文本处理实践_日志清洗解析【指导】
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
jquery插件bootstrapValidator表单验证详解
Laravel如何集成Inertia.js与Vue/React?(安装配置)
Laravel如何处理异常和错误?(Handler示例)
Laravel Fortify是什么,和Jetstream有什么关系
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
装修招标网站设计制作流程,装修招标流程?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
微信小程序 canvas开发实例及注意事项
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
个人网站制作流程图片大全,个人网站如何注销?
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
JavaScript如何实现类型判断_typeof和instanceof有什么区别
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
如何快速生成ASP一键建站模板并优化安全性?
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
如何在建站之星网店版论坛获取技术支持?
如何在服务器上配置二级域名建站?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
昵图网官网入口 昵图网素材平台官方入口
Laravel如何发送系统通知?(Notification渠道示例)
js实现获取鼠标当前的位置
javascript如何操作浏览器历史记录_怎样实现无刷新导航
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
青岛网站建设如何选择本地服务器?
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何用PHP快速搭建高效网站?分步指南
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
利用JavaScript实现拖拽改变元素大小
下一篇: 长春网站制作案例,长春欧亚集团官方网站?
下一篇: 长春网站制作案例,长春欧亚集团官方网站?

