python3使用正则表达式小记
来源:互联网 发布:access数据库实训心得 编辑:程序博客网 时间:2024/06/07 18:15
- 引言
- 非贪婪匹配和零宽度负回顾后发断言
- 文件读写
- 参考
引言
一个小任务中需要将多个数据段中的最新版本信息提取出来,用到了正则表达式提取数据,有些坑,特此记录。
1.非贪婪匹配和零宽度负回顾后发断言
先看代码
import relistVersion=[]fileText='PRS-7000风电场-SZ142372_低压-20170702新版本PRS-7000风电场-SZ142372_低压-150102'matchV=re.findall(r"((PRS-700U|PRS-7000).+?(?<!SZ)(\d{8}|\d{7}|\d{6}))", fileText, re.MULTILINE)print(matchV)for matchVersion in matchV: listVersion.append(matchVersion[0])print(listVersion)
输出:
[('PRS-7000风电场-SZ142372_低压-20170702', 'PRS-7000', '20170702'), ('PRS-7000风电场-SZ142372_低压-150102', 'PRS-7000', '150102')]['PRS-7000风电场-SZ142372_低压-20170702', 'PRS-7000风电场-SZ142372_低压-150102']
- 正则
((PRS-700U|PRS-7000).+?(?<!SZ)(\d{8}|\d{7}|\d{6}))
中间的.+?
用到了非贪婪匹配,即懒惰匹配,匹配尽可能少的字符,避免了将两条信息匹配成一条(?<!SZ)
用到了零宽度负回顾后发断言,来断言此位置的前面不能匹配SZ
,避免将SZ开头的编号匹配为六位日期。
当然,日期的正则这里没有更具体,比如判断范围、闰年等。- 如输出结果所示,正则表达式的findall函数以列表形式返回全部能匹配的子串,匹配了所有()分组,遍历取第一个,即最外层()的匹配
re.MULTILINE
表示多行匹配
2.文件读写
读文件:
with open(DATA_FILE) as input_file: for line in input_file: Index, fileName, fileType, creatTime, fileRow, fileText = line.split(';') print(Index+','+fileName+','+fileText) ...
写文件:
with open(STORED_FILE, 'w') as output_file: str_list = [line + '\n' for line in outputText] # 在list中加入换行符 output_file.writelines(str_list)
参考
Python3标准库(二) re模块
正则表达式30分钟入门教程
阅读全文
0 0
- python3使用正则表达式小记
- Python3正则表达式使用
- C++中正则表达式使用小记
- 2015-11-19-正则表达式使用小记
- Oracle中正则表达式使用小记
- python3正则表达式学习及使用记录
- 正则表达式学习小记
- 正则表达式小记(1)
- 正则表达式小记
- 正则表达式(小记)
- grep 正则表达式小记
- 正则表达式小记
- 正则表达式小记
- Java正则表达式小记
- 正则表达式 简单小记
- 正则表达式小记
- js正则表达式小记
- 正则表达式小记
- python操作mongodb之基础操作
- 神经网络与深度学习(3)
- java开发之访问服务器磁盘上的html页面
- 我的博客时代正式开始了。
- sql server 获取每一个类别中值最大的一条数据
- python3使用正则表达式小记
- H5 2D渲染引擎—Pixi.js 渲染器、舞台和精灵的创建
- J2SE总结 泛型
- 用户体验至上:用线框和原型工具打造理想产品
- abap中Tablecontrol隐藏列
- SynchronousQueue、LinkedBlockingQueue、ArrayBlockingQueue性能测试
- github入门到上传本地项目
- ATM信元的交换方式为?
- ASP.NET MVC5 频率控制Filter