Python 正则表达式 'negative' 模式匹配
Python regex 'negative' pattern matching
我正在处理一大批文本字符串,尝试匹配日期时间并使用 strptime() 函数将它们转换为 MM-DD-YYYY 格式。
但是,文本中出现了一些 5 位序列号(例如 90481),误导了我的 .findall() 函数将它们视为日期时间。我如何通过包含 ^() 类型的条件来排除它们来避免它们?
它们的共同点是都是5位数字,所以我试过^(?!\d{5})但结果并不好。处理这组数字的最佳方法是什么?
谢谢。
注1:我看过this post,但好像看不懂
注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
我正在处理一大批文本字符串,尝试匹配日期时间并使用 strptime() 函数将它们转换为 MM-DD-YYYY 格式。
但是,文本中出现了一些 5 位序列号(例如 90481),误导了我的 .findall() 函数将它们视为日期时间。我如何通过包含 ^() 类型的条件来排除它们来避免它们?
它们的共同点是都是5位数字,所以我试过^(?!\d{5})但结果并不好。处理这组数字的最佳方法是什么?
谢谢。
注1:我看过this post,但好像看不懂
注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