簡體   English   中英

如何從Python中使用正則表達式提取的日期中刪除垃圾值

[英]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

輸出15/11/85 (如所希望的)但也: 16/22

輸入文字2

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

輸出27/11/777/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 +))。

使用正則表達式的主要規則是:了解數據。 您必須編寫盡可能准確的正則表達式。

然后,我建議您將這些原始日期解析為實際的,完整的日期對象 它有兩個主要目標:首先,您過濾掉正則表達式匹配項; 其次,現在您可以使用日期對象的方法以更方便,便捷的方式處理日期,而不僅僅是比較文本字符串。 例如,您可以訪問日期的日,月或年,將其與所需值進行比較,然后根據這種比較過濾出日期。

對於日期解析,我建議您使用復雜的日期解析庫之一,例如dateutildateparser ,它們免費為您處理許多棘手的細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM