我试图从字符串中检索一个日期。问题是这个日期的模式变化很大(字符串来自OCR读取)。以下是我需要识别的模式:
到目前为止,我所拥有的RegEx是一种轻微的调整(它现在允许空间而不是仅仅-或/分隔数字)与stackoverflow回答:
match_date=re.search(r'(?:(?:31(\/|-|\.| )(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.| )(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.| )(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})',line)
有没有办法为这样的“流体”日期结构建立一个正则表达式?
发布于 2018-01-23 18:16:38
Regex:\b(?:\d{1,2}[- /]\s?){2}(?:\d{4}|\d{2})\b
还是^(?:\d{1,2}[- /]\s?){2}(?:\d{4}|\d{2})$
发布于 2018-01-23 18:12:50
发布于 2018-01-23 19:29:21
我知道regex是一个更好的答案,因为只有一行您可以匹配所有的可能性,但我更喜欢转换到日期时间。
from datetime import datetime
string = "11- 11- 1111"
for fmt in ('%Y-%m-%d', '%d- %m- %Y', '%d %m %Y', '%d- %m- %y'):
try:
datetime_object = datetime.strptime(string, '%d- %m- %y')
...
https://stackoverflow.com/questions/48408057
复制相似问题