Python正则表达式忽略日期模式

标签 python regex

示例数据:

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)

请参阅regex demo

详细信息

  • (?i) - 与 re.I 相同- 不区分大小写模式开启
  • \b - 单词边界
  • w(?:eigh)?t -wtweight
  • \b - 单词边界
  • .{1,25}? - 除换行符之外的任何 1 到 25 个字符,尽可能少
  • \b - 单词边界
  • (?<!\d/) - 如果紧邻当前位置左侧有一个数字和/,则负向后查找将导致匹配失败。
  • (\d+(?:\.\d+)?) - 第 1 组:一位或多位数字后跟一个可选的点序列和一位或多位数字
  • (?!/?\d) - 如果紧邻当前位置的右侧有一个可选的/,则匹配失败的负前瞻和一个数字
  • \s* - 0+ 空格
  • (\w+) - 第 2 组:一个或多个字母、数字或下划线。

参见Python demo :

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')]

关于Python正则表达式忽略日期模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59849789/

相关文章:

python - 触发器将添加到数据库的新行发送到 postgres 中的另一个数据库?

python - 来自可变长度元素的动态表单 : wtforms

python - TensorFlow - 返回多维张量的不同子张量

python - 为什么 list(xrange) 比 range() 慢?

jquery - 正则表达式允许用户仅输入文本,而不是字母数字

Java Regex 检查字符串是否包含 XML 标记

javascript - 白名单 javascript 去除 html 标签

python - python中使用类方法修改对象的属性

java - 在 Java 中提取值的模式

Java正则表达式第一个匹配的字符