Python使用中文正则表达式匹配指定中文字符串的方法示例

作者:雪峰流云 时间:2021-11-28 22:17:00 

本文实例讲述了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使用中文正则表达式匹配指定中文字符串的方法示例

PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:

JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript

正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg

希望本文所述对大家Python程序设计有所帮助。

标签:Python,中文,正则表达式
0
投稿

猜你喜欢

  • 详解Vue项目的打包方式

    2024-05-09 09:21:24
  • SQL Server 2005实现数据库缓存依赖

    2009-05-07 13:20:00
  • JS字符串转GBK编码超精简实现详解

    2024-04-28 09:43:13
  • python虚拟环境virualenv的安装与使用

    2023-10-05 14:38:33
  • Python实现仿射密码的思路详解

    2021-04-17 22:32:00
  • Python 数据结构之树的概念详解

    2021-06-24 17:08:25
  • vue中对象数组去重的实现

    2024-04-27 16:18:27
  • 用CSS制作兼容多浏览量器的隐藏菜单

    2007-08-30 09:05:00
  • python 字符串和整数的转换方法

    2023-10-11 02:31:42
  • Python+Turtle绘制可爱的可达鸭

    2021-06-18 10:20:29
  • 使用python的pyplot绘制函数实例

    2021-07-27 01:21:30
  • Python Pandas数据合并pd.merge用法详解

    2022-07-18 22:15:47
  • 对python中的six.moves模块的下载函数urlretrieve详解

    2023-10-20 00:23:45
  • Python实现像awk一样分割字符串

    2022-07-29 18:42:07
  • python实现微信机器人: 登录微信、消息接收、自动回复功能

    2023-05-30 05:42:53
  • python肯德尔系数相关性数据分析示例

    2023-02-20 21:42:35
  • Python内置方法实现字符串的秘钥加解密(推荐)

    2023-10-22 23:45:35
  • Python异常处理总结

    2021-12-18 17:19:19
  • Python机器学习NLP自然语言处理基本操作关键词

    2023-11-09 05:51:31
  • 编辑BLOG文章的一些好习惯

    2007-11-15 06:35:00
  • asp之家 网络编程 m.aspxhome.com