Python使用中文正则表达式来匹配指定的中文字符串
本文说明了Python使用中文正则表达式匹配指定中文字符串的方法。分享给大家参考,如下:
业务场景:
从中文句子中匹配指定的中文子字符串。我在工作中遇到过很多这样的情况,总结如下。
困难:
处理字符代码,如GBK和utf8,汉字包含在常规匹配模式中,所以如果汉字要正常工作,我们必须非常小心。建议统一utf8编码,如果不是最好的情况,我们可以自行处理。
通常,一个通用的正则表达式会简化程序和代码的处理,使过程变得简单,事半功倍,这往往是高手和新手最显著的区别。
示例1 :
具体的省市县等词是从QQ无罪数据库分析出来的,这里的正则表达式基本可以满足业务场景,偷懒匹配?这是非常必要的,因为如果我们处理不好,就不会得到我们想要的结果。它的美,请读者自己去琢磨,我现在只想摸摸它!代码如下:
#!/usr/bin/env python # encoging : uft-8 # description :从字符串中提取省、市、县的名称。导入重新导入系统重新加载系统。设置默认编码(' utf8') #匹配规则必须包含u或r#。这里第一个分组的问号是惰性匹配,这是必须要做的。pattern=\ ur' ([\ u4e00-\ u9fa5] {2,5}?(?省|自治区|市([\u4e00-\u9fa5]{2,7}?(?市|区|县|州){0,1}([\u4e00-\u9fa5]{2,7}?(?市|区|县)){0,1}'data_list=['北京','陕西省Xi市雁塔区','北京市海淀区','黑龙江省佳木斯市汤原县','内蒙古自治区赤峰市','贵州省黔南州贵定县','伊犁州奎屯市, 新疆维吾尔自治区']对于data _ list : data _ utf8=data . decode(' utf8 ')Print data _ utf8 country=data省份=' city=' ' district=' ' # PATTERN=re.compile(PATTERN n3)PATTERN=re.compile(PATTERN)m=PATTERN . search(data _ utf8)如果不是m : Print country ' | | ' continue # Print m . group()country=' China '如果m.lastindex=1:省份=m.group (1)如果m . last
例2:
从ip138获取指定ip的地理位置。
Ip138是我们每天使用比较频繁的一个Ip查询网站。我需要查询这个页面,以便获得每个ip对应的isp信息。
我在网上搜索了很久,但是找不到ip138返回json等接口,所以只能这样查询,所以我们不可避免的需要分析上面红框中标注的isp信息。如果用DOM来解析和指定div标签,恐怕不行。更简单的方法是使用中文规则匹配,直接从返回的html中获取“本站主数据”的信息。
这是我摸索的代码
#!/usr/bin/env python # encoding : utf-8 # date : 2016-03-31 # note :对于测试中遇到的问题,在请求指定链接时会出现超时现象。您可以多次请求导入请求。是否重新导入sys reload(sys)sys . setdefaultencoding(' utf8 ')IP138 _ API=' http://www . IP138.com/IPS 138 . ASP?Ip=' PATTERN=ur 'li此网站的主数据:(。*?)/Li ' def query _ API(URL): data=' ' r=requests . get(URL)if r . status _ code==200: data=r . content return datadef parse _ IP 138(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)如果m : print m . group(1)else : print ' regex match failed '如果_ _ name _ _==' _ _ main _ _ _ ' 3360 URL=IP 138 _ API ' 14 . 192 . 60 . 0 ' resp=query _ API(URL)如果没有resp3360print ' no content ' parse
PS:这里有两个非常方便的正则表达式工具,供大家参考:
JavaScript正则表达式在线测试工具:http://tools.jb51.net/regex/javascript
在线正则表达式生成工具:http://tools.jb51.net/regex/create_reg
有关Python的更多信息,请参考本网站的主题:《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》和《Python入门与进阶经典教程》
希望本文对Python编程有所帮助。
版权声明:Python使用中文正则表达式来匹配指定的中文字符串是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。