Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式';负数';模式匹配_Python_Regex_Datetime_Findall - Fatal编程技术网

Python正则表达式';负数';模式匹配

Python正则表达式';负数';模式匹配,python,regex,datetime,findall,Python,Regex,Datetime,Findall,我正在处理大量文本字符串,试图匹配日期时间,并使用strtime()函数将其转换为MM-DD-YYYY格式 但是,文本中出现的一些5位序列号(例如90481)误导了my.findall()函数将其视为日期时间。如何通过包含^()类型的条件来排除它们来避免它们 它们的共同点是它们都是5位数,所以我尝试了^(?!\d{5}),但结果不太好。解决这一系列问题的最佳方法是什么 多谢各位 注1:我已经读过了,但似乎看不懂 注2:关于有人在评论部分询问的日期格式 我正在处理的数据框中有许多日期格式,例如:

我正在处理大量文本字符串,试图匹配日期时间,并使用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
要求匹配的字符前面没有数字(或字母或下划线)。类似的事情最终也会发生。