目标:从医疗记录中提取日期(存储在熊猫系列中,日期的格式多种多样)
对于我使用的数字日期:
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
输出1:5/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月等不是问题。你知道吗
您应该指定“所有格式”的含义。在您的示例中,只显示1种格式。“2016年1月2日”“2016年2月1日”“2016年1月2日”能否全部到场?欧洲和美国的时间格式?等?你知道吗
在您的示例中,日期似乎总是在行的开头,并且被圆括号括起来,但是这使得它有点简单。你知道吗
^((\d+/\d+)。^((\d+/\d+/d+)。
使用正则表达式的主要规则是:了解数据。你必须尽可能准确地编写正则表达式。你知道吗
然后我建议您将这些原始的日期解析成实际的、成熟的日期对象。它有两个主要目标:第一,过滤掉负regex匹配;第二,现在可以使用date对象的方法来处理日期,而不仅仅是比较文本字符串。例如,您可以访问日期的日、月或年,将其与所需值进行比较,并根据这种比较筛选出日期。你知道吗
对于解析日期,我建议您使用一个复杂的日期解析库,例如
dateutil
或dateparser
,它免费为您处理许多棘手的细节。你知道吗相关问题 更多 >
编程相关推荐