如何从Python中用regex提取的日期中删除垃圾值

2024-09-30 18:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

目标:从医疗记录中提取日期(存储在熊猫系列中,日期的格式多种多样)

对于我使用的数字日期:

str.extractall(r'((?:\b\d{1,2}[/]){1,2}(?:(?:\d{2}\b)|\b\d{4}\b))')

问题:

输入文本1

"(5/11/85) Crt-1.96, BUN-26; AST/ALT-16/22; Independent

输出15/11/85(如所愿),但也:16/22

输入文本2

[text...] (7/11/77) CBC: 4.9/36/308 Pertinent [...]:

输出2:7/11/77(如所愿),但也9/36

尤其是第二种情况很难,因为将其转换为日期返回:2036年9月,因此,不能这样选择。你知道吗

[^-]更糟。你知道吗

文本中到处都是日期,比如:

[...] has also taken diet pills (last episode in Feb 1993) but [...]

1993年2月等不是问题。你知道吗


Tags: text文本目标格式记录数字astalt
2条回答

您应该指定“所有格式”的含义。在您的示例中,只显示1种格式。“2016年1月2日”“2016年2月1日”“2016年1月2日”能否全部到场?欧洲和美国的时间格式?等?你知道吗

在您的示例中,日期似乎总是在行的开头,并且被圆括号括起来,但是这使得它有点简单。你知道吗

^((\d+/\d+)。^((\d+/\d+/d+)。

使用正则表达式的主要规则是:了解数据。你必须尽可能准确地编写正则表达式。你知道吗

然后我建议您将这些原始的日期解析成实际的、成熟的日期对象。它有两个主要目标:第一,过滤掉负regex匹配;第二,现在可以使用date对象的方法来处理日期,而不仅仅是比较文本字符串。例如,您可以访问日期的日、月或年,将其与所需值进行比较,并根据这种比较筛选出日期。你知道吗

对于解析日期,我建议您使用一个复杂的日期解析库,例如dateutildateparser,它免费为您处理许多棘手的细节。你知道吗

相关问题 更多 >