python - Python 正则表达式忽略日期模式
问题描述
样本数据:
Weight Measured: 80.7 kg (11/27/1900 24:59:00)
Pulse 64 \F\ Temp 37.3?C (99.1 ?F) \F\ Wt 101.2 kg (223 lb)
Weight as of 11/11/1900 72.2 kg (159 lb 1.6 oz)
Resp. rate 16, height 177.8 cm (5' 10"), weight 84.7 kg (186 lb|
11.2 oz)
And one extra weight example 100lbs
部分工作的正则表达式:
\b(?i)(?:weight|wt)\b(?:.){1,25}?\b(\d+\.?(?:\d+)).*?(\w+)\b
电流输出:
('80.7', 'kg'), ('101.2', 'kg'), ('11', '11'), ('84.7', 'kg'), ('100', 'lbs')
预期输出:
('80.7', 'kg'), ('101.2', 'kg'), ('72.2', 'kg'), ('84.7', 'kg'), ('100', 'lbs')
如何让我当前的正则表达式忽略日期并捕获随后的值?另外,如何使这个正则表达式在行尾停止匹配?
解决方案
您可以使用
re.findall(r'(?i)\bw(?:eigh)?t\b.{1,25}?\b(?<!\d/)(\d+(?:\.\d+)?)(?!/?\d)\s*(\w+)', text)
查看正则表达式演示
细节
(?i)
- 与re.I
- 不区分大小写模式开启\b
- 单词边界w(?:eigh)?t
-wt
或weight
\b
- 单词边界.{1,25}?
- 除换行符之外的任何 1 到 25 个字符,尽可能少\b
- 单词边界(?<!\d/)
- 如果紧靠当前位置左侧有一个数字和/
(\d+(?:\.\d+)?)
- 第 1 组:一个或多个数字后跟一个可选的点序列和一个或多个数字(?!/?\d)
- 如果在当前位置的右侧有一个可选/
和一个数字,则匹配失败的负前瞻\s*
- 0+ 个空格(\w+)
- 第 2 组:一个或多个字母、数字或下划线。
请参阅Python 演示:
import re
text = """Weight Measured: 80.7 kg (11/27/1900 24:59:00)\nPulse 64 \F\ Temp 37.3?C (99.1 ?F) \F\ Wt 101.2 kg (223 lb)\nWeight as of 11/11/1900 72.2 kg (159 lb 1.6 oz)\nResp. rate 16, height 177.8 cm (5' 10"), weight 84.7 kg (186 lb|\n11.2 oz)\nAnd one extra weight example 100lbs"""
print(re.findall(r'(?i)\bw(?:eigh)?t\b.{1,25}?\b(?<!\d/)(\d+(?:\.\d+)?)(?!/?\d)\s*(\w+)', text))
# => [('80.7', 'kg'), ('101.2', 'kg'), ('72.2', 'kg'), ('84.7', 'kg'), ('100', 'lbs')]
推荐阅读
- mysql - 从 Oracle 查询 MySQL 需要在字段名周围加上引号
- bootstrap-4 - Toasts 是不可见的,不能在 Bootstrap 4 中关闭
- testing - 使用 Cypress 测试依赖 OAuth 的应用程序
- excel - 如何匹配多个条件并获取消息
- javascript - JS 学士考试算法
- c++ - 有没有机会在不知道拥有队列的情况下触发 kevent?有什么选择吗?
- php - 主键缺失值
- java - 如果我在成功下载后启动动态模块中的活动,则会出现 classnotfoundException
- python - 如何在python的文件夹中使用PIL调整图像大小
- c# - c# 字典不抛出 KeyNotFound 异常?