python - 正则表达式在字符之间仅包含一位数字
问题描述
我必须解析一个 PDF 文档,并且我正在使用带有 re(regex) 的 PyPDF2。
该文件包括几行,如下所示:
18-02-202010:44:48PEDMILANO OVEST- BINASCOA1,40
我需要从这一行中提取时间和金额之间的文本(粗体):
PEDMILANO OVEST- BINASCOA
以下代码正在运行,但有时此代码找不到任何内容,因为可以是这些字符之间的数字,例如18-02-202010:44:48PEDMILANO OVE3ST- BINASCOA1,40
.
regex = re.compile(r'\d\d-\d\d-\d\d\d\d\d\d:\d\d:\d\d\D+\d+,\d\d')
有没有办法在这个正则表达式中包含一个数字?
解决方案
我建议使用
import re
text = "18-02-202010:44:48PEDMILANO OVEST- BINASCOA1,40"
print( re.sub(r'^\d{2}-\d{2}-\d{5,6}:\d{2}:\d{2}(.*?)\d+(?:,\d+)?$', r'\1', text) )
它也可以写成
re.sub(r'^\d{2}-\d{2}-\d{5,6}:\d{2}:\d{2}|\d+(?:,\d+)?$', '', text)
或者,如果您更喜欢匹配和捕获:
m = re.search(r'^\d{2}-\d{2}-\d{5,6}:\d{2}:\d{2}(.*?)\d+(?:,\d+)?$', text)
if m:
print( m.group(1) )
查看在线 Python 演示。使用此解决方案,您的数据可以以任何字符开头,并且将包含任何字符(不包括换行符,因为您的数据在单行上)。
正则表达式详细信息
^
- 字符串的开始\d{2}-\d{2}-\d{5,6}:\d{2}:\d{2}
- 日期时间字符串:两位数,-
, 两位数,-
, 五位或六位,:
, 两位数,:
两位数(.*?)
- 第 1 组:除换行符之外的任何零个或多个字符,尽可能少\d+(?:,\d+)?
- 一个 int/float 值模式:1+ 位,后跟 1+ 位的可选,
序列$
- 字符串结束。
请参阅正则表达式演示。
推荐阅读
- aframe - 如何在框架上检测到我的声音时让 3D 模型头像说话
- javascript - HTML 的问题 - 按钮被自动点击
- java - 在Java中修改arraylist对象
- ruby-on-rails - 可以使用 axios 请求从 Rails 端点获取 zip 文件吗?
- c++ - 在字符串中查找符号索引
- reactjs - React js:同步运行具有共同关注点的效果(useEffect)
- python - 如何在python中的另一个json中获取json值?
- javascript - Laravel 7 - 未捕获的 ReferenceError:Dropzone 未定义
- jquery - 如何检测循环中的最后一个 ajax 调用?
- python - 如何将 spyder 连接到 postgres 数据库?