Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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 使用re.findall()从字符串文本获取日期_Python_Regex_String_Findall - Fatal编程技术网

Python 使用re.findall()从字符串文本获取日期

Python 使用re.findall()从字符串文本获取日期,python,regex,string,findall,Python,Regex,String,Findall,我试图从整个字符串文本中提取日期。但我不知道如何解决这个问题: 我发现的日期格式是20年10月19日或2020年10月19日 为了实现这一点,我使用以下代码: '''re.findall(r'\d*\d (?:%s)\.? \d{2,4}\b' % '|'.join(m.title().rstrip('.') for m in calendar.month_abbr[1:]),string)''' 当类似的内容出现在文本中时,问题就出现了:10月19日16:35和re.findall()返回1

我试图从整个字符串文本中提取日期。但我不知道如何解决这个问题:

我发现的日期格式是20年10月19日或2020年10月19日

为了实现这一点,我使用以下代码:

'''re.findall(r'\d*\d (?:%s)\.? \d{2,4}\b' % '|'.join(m.title().rstrip('.') for m in calendar.month_abbr[1:]),string)'''
当类似的内容出现在文本中时,问题就出现了:10月19日16:35和
re.findall()
返回
16年10月19日

我怎样才能让它只返回我要找的东西


谢谢

如果两位数字后有冒号和数字,则匹配可能失败:

r'\d*\d (?:%s)\.? (?:\d{4}\b|\d{2}\b(?!:\d))'


(?:\d{4}\b{124;\ d{2}\b(?!:\d))
将匹配四位数字后跟一个单词边界,或者两位数字后跟一个单词边界,但不跟
和一个数字。

哪些字符(冒号是一个)不能立即跟在两位数年份后面?为什么
10月19日16日
无效?年复一年不能信任任何人?使用
\d{2,4}(?!\S)
@Edward:因为16是一段时间的一部分,在这种情况下不是一年。