簡體   English   中英

Python正則表達式“負”模式匹配

[英]Python regex 'negative' pattern matching

我正在處理大量文本字符串,嘗試匹配日期時間,並使用strptime()函數將其轉換為MM-DD-YYYY格式。

但是,文本中出現了一些5位序列號(例如90481),這些序列號誤導了我的.findall()函數,將其視為日期時間。 如何通過包含^()類型的條件來排除它們來避免它們?

它們的共同點是它們都是5位數字,因此我嘗試了^(?!\\ d {5}),但結果並不理想。 解決這組數字的最佳方法是什么?

謝謝。

注意1:我已經閱讀了這篇文章 ,但似乎無法理解。

注意2:關於日期格式的問題,有人在評論部分提出了要求

我正在處理的數據框中有許多日期格式,例如:

 05/10/2001; 05/10/01; 5/10/09; 6/2/01 May-10-2001; May 10, 2010; March 25, 2001; Mar. 25, 2001; Mar 25 2001; 25 Mar 2001; 25 March 2001; 25 Mar. 2001; 25 March, 2001 Mar 25th, 2001; Mar 25th, 2001; Mar 12nd, 2001 Feb 2001; Sep 2001; Oct 2001 5/2001; 11/2001 2001; 2015 

所以我有一個相當長的.findall(r'')函數,但要點是避免選擇那些5位數字的序列號。

此致

您可以在正則表達式中使用\\b ,以避免在數字較多的數字中間找到匹配項。 在開頭放置一個,在結尾放置一個,並確保它們不包含在|范圍內。 (OR)操作,將其余部分包裝在非捕獲組中。

我刪除了幾個月以使其簡短:

\b(?:\d{1,2}\/\d{1,2}\/\d{2,4}|(?:Jan|Feb|Mar|Apr|   |Nov|Dec)[a-z]*-\d{2}-\d{2,4})\b

暫無
暫無

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

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