[英]How to remove garbage values from dates extracted with regex in 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
輸出1 : 5/11/85
(如所希望的)但也: 16/22
輸入文字2 :
[text...] (7/11/77) CBC: 4.9/36/308 Pertinent [...]:
輸出2 : 7/11/77
( 7/11/77
),但也為9/36
特別是第二種情況很難,因為將其轉換為日期會返回:2036年9月,因此,不能以這種方式選擇它。
[^-]
使情況更糟。
日期在文本中無處不在,例如:
[...] has also taken diet pills (last episode in Feb 1993) but [...]
1993年2月等不是問題。
您應該指定“所有格式”的含義。 在您的示例中,您僅顯示1種格式。 是否可以全部顯示“ JAN-02-2016”,“ 01/02/2016”,“ 02/01/2016”? 歐洲和美國時間格式? 等等?
在您的示例中,日期看起來總是在行的開頭,並且用括號括起來,但是,這使得它很簡單。
^((\\ d + / \\ d +))。 | ^((\\ d + / \\ d + / d +))。
使用正則表達式的主要規則是:了解數據。 您必須編寫盡可能准確的正則表達式。
然后,我建議您將這些原始日期解析為實際的,完整的日期對象 。 它有兩個主要目標:首先,您過濾掉正則表達式匹配項; 其次,現在您可以使用日期對象的方法以更方便,便捷的方式處理日期,而不僅僅是比較文本字符串。 例如,您可以訪問日期的日,月或年,將其與所需值進行比較,然后根據這種比較過濾出日期。
對於日期解析,我建議您使用復雜的日期解析庫之一,例如dateutil
或dateparser
,它們免費為您處理許多棘手的細節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.