【Regex】初试Python下的中文正则表达式
2016-07-05 12:25
423 查看
0x00 前言
真的是第一次在Python上做正则表达式呀……走了好多弯路,表示自己实在是笨的不行,难得实现了个小Demo,做点备忘好了。简要概括一下就是:英文正则亲和度蛮高的,随意;中文,转成Unicode再说话!
0x01 参考页面
正则表达式 - 教程正则表达式 - 简介
正则表达式 - 语法
正则表达式 - 元字符
正则表达式 - 运算符优先级
正则表达式 - 匹配规则
正则表达式 - 实例
正则表达式在线测试
在程序里调试太麻烦了,有个在线的工具实时尝试还是相当不错的
30分钟掌握正则表达式
这个真的不错的,基本上入门都靠的它
剧透一下30分钟学不完的 23333
0x02 正则步骤
转成Unicode个人是通过decode转成unicode编码来保证编码一致性的,感觉笨笨的,如果有什么好方法希望大神们能务必教教我~ ^_^
拍脑袋自己想个正则表达式
在站长工具之类的地方验证正则效果
非获取(关键)
(?:pattern)匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (
|) 来组合一个模式的各个部分是很有用。例如,
'industr(?:y|ies)就是一个比
'industry|industries'更简略的表达式。
单单从结论上讲,java可以直接跑通的正则表达式,在python里re.compile(xxx)时,可以试着在每个左括号的右边加上非获取符号(
?:)
输出的时候随意encode成自己需要的编码
0x03 示例代码
#coding=utf8 import sys import re, os import string Pnumberic = re.compile(u"[\\d,\\.]+(?:\\d|万|亿)元"); Ppercent = re.compile(u"[\\d,\\.]+%"); Pzero = re.compile(u"(?:[^\\d])0(?:[^\\d])"); PDatetime = re.compile(u"(?:(?:[0-9]{4})[-/\\.年])(?:第[一二三四]季度)?[末初前后]?(?:(?:[01]?[0-9])[-/\\.月])?(?:[0-3]?[0-9]{1}[日])?"); def LR(s): return '{'.decode('utf-8') + s + '}'.decode('utf-8') if __name__ == "__main__" : each = u"听说这个公司的净资产为369.38亿元(截至2015年9月30日),然后随便放个12450元呀,2016年7月5日,12.34%和2.5%的百分比什么的试试看。" print each print if Pnumberic.findall(each): #print Pnumberic.search(each).group() for pn in Pnumberic.findall(each): print pn each = each.replace(pn,LR(pn)) print if Ppercent.findall(each): #print Ppercent.search(each).group() for pp in Ppercent.findall(each): print pp each = each.replace(pp,LR(pp)) print if PDatetime.findall(each): #print PDatetime.search(each).group() for dt in PDatetime.findall(each): print dt each = each.replace(dt,LR(dt)) print print each # f.write(each.encode('utf-8')+'\n')
输出:
听说这个公司的净资产为369.38亿元(截至2015年9月30日),然后随便放个12450元呀,2016年7月5日,12.34%和2.5%的百分比什么的试试看。 369.38亿元 12450元 12.34% 2.5% 2015年9月30日 2016年7月5日 听说这个公司的净资产为{369.38亿元}(截至{2015年9月30日}),然后随便放个{12450元}呀,{2016年7月5日},{12.34%}和{2.5%}的百分比什么的试试看。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- Linux 与 Windows 对UNICODE 的处理方式
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- msql 正则表达式
- 正则表达式
- Python将excel导入到mysql中
- Java简单字符串插值实现
- Python在CAM软件Genesis2000中的应用