Python正则表达式';负数';模式匹配
我正在处理大量文本字符串,试图匹配日期时间,并使用strtime()函数将其转换为MM-DD-YYYY格式 但是,文本中出现的一些5位序列号(例如90481)误导了my.findall()函数将其视为日期时间。如何通过包含^()类型的条件来排除它们来避免它们 它们的共同点是它们都是5位数,所以我尝试了^(?!\d{5}),但结果不太好。解决这一系列问题的最佳方法是什么 多谢各位 注1:我已经读过了,但似乎看不懂 注2:关于有人在评论部分询问的日期格式 我正在处理的数据框中有许多日期格式,例如:Python正则表达式';负数';模式匹配,python,regex,datetime,findall,Python,Regex,Datetime,Findall,我正在处理大量文本字符串,试图匹配日期时间,并使用strtime()函数将其转换为MM-DD-YYYY格式 但是,文本中出现的一些5位序列号(例如90481)误导了my.findall()函数将其视为日期时间。如何通过包含^()类型的条件来排除它们来避免它们 它们的共同点是它们都是5位数,所以我尝试了^(?!\d{5}),但结果不太好。解决这一系列问题的最佳方法是什么 多谢各位 注1:我已经读过了,但似乎看不懂 注2:关于有人在评论部分询问的日期格式 我正在处理的数据框中有许多日期格式,例如:
05/10/2001;05/10/01; 5/10/09; 6/2/01
2001年5月10日;2010年5月10日;二〇〇一年三月二十五日;;2001年3月25日;2001年3月25日;
2001年3月25日;2001年3月25日;2001年3月25日;2001年3月25日
2001年3月25日;2001年3月25日;2001年3月12日
2001年2月;2001年9月;2001年10月
5/2001; 11/2001
2001; 2015
您可以在正则表达式中使用\b
,以避免在多个数字的中间找到匹配项。将一个放在开始处,一个放在结束处,通过将其余部分包装在非捕获组中,确保它们不包括在
(或)操作的范围内
我删除了几个月以保持简短:
\b(?:\d{1,2}\/\d{1,2}\/\d{2,4}|(?:Jan|Feb|Mar|Apr| |Nov|Dec)[a-z]*-\d{2}-\d{2,4})\b
首先,你的findall是如何工作的?请发布完整的正则表达式。我会把它添加到原始的问题线程中。如果你能用简单的英语解释你到底需要匹配什么,我会更乐意帮助你。日期时间可以用多种格式编写,因此不知道具体使用的是什么会使编写变得困难。正则表达式似乎与90481不匹配。我已将我的(相当简单)代码添加到原始线程中,只是试图避免使用那些5位序列号,以便Python不会将它们视为日期时间。这非常有效!非常感谢你。您介意我问一下\b()\b在这种情况下是如何(以及为什么)工作的吗?
\b
匹配字母数字字符序列和非字母数字字符序列之间的中断(它与字符不匹配,只是序列中存在中断)。因此,当匹配的第一个字符应该是数字时,第一个\b
要求匹配的字符前面没有数字(或字母或下划线)。类似的事情最终也会发生。