Python 从字符串中检索日期

Python 从字符串中检索日期,python,regex,Python,Regex,我正在尝试从字符串中检索日期。问题是这个日期的模式变化很大(字符串来自OCR读取)。以下是我需要识别的模式: 1111年11月11日(我已经可以拿到这个了) 11-11-1111(我已经可以拿到这个了) 11111(我已经可以得到这个了) 11-11-1111 11 1111 11-11 1111 23-10-17 9 06-17 到目前为止,我使用的正则表达式是一个轻微的修改(它现在允许空格,而不是仅仅分隔数字): 有没有办法为这种“流动”的日期结构构建正则表达式?你可以 \b\d{1,2

我正在尝试从字符串中检索日期。问题是这个日期的模式变化很大(字符串来自OCR读取)。以下是我需要识别的模式:

  • 1111年11月11日(我已经可以拿到这个了)
  • 11-11-1111(我已经可以拿到这个了)
  • 11111(我已经可以得到这个了)
  • 11-11-1111
  • 11 1111
  • 11-11 1111
  • 23-10-17
  • 9 06-17
到目前为止,我使用的正则表达式是一个轻微的修改(它现在允许空格,而不是仅仅分隔数字):

有没有办法为这种“流动”的日期结构构建正则表达式?

你可以

\b\d{1,2}[- /]+\d{1,2}[- /]+\d{2,4}\b
看。

你可以去

\b\d{1,2}[- /]+\d{1,2}[- /]+\d{2,4}\b

参见.

Regex
\b(?:\d{1,2}[-/]\s?{2}(:\d{4}\d{2})\b
^(?:\d{1,2}[-/]\s?{2}(?:\d{4}\d{2})$


Regex
\b(?:\d{1,2}[-/]\s?{2}(?:\d{4}}\d{2})\b
^(?:\d{1,2}[-/]\s?{2}(?:\d{4}\d{2})$


我知道正则表达式是一个更好的答案,因为一行代码可以匹配所有的可能性,但我更喜欢转换为datetime

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')
...

我知道正则表达式是一个更好的答案,因为一行代码可以匹配所有的可能性,但我更喜欢转换为datetime

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')
...

? 如果不需要,则无需过度复杂化该模式。
\d{1,2}\d{1,4}\d{2}\d{1,4}\d{2}(?:\d{2})
?非常正确,谢谢!?如果您不需要,则无需过度复杂该模式。
\d{1,2}\d{1,4}\d{2}\d{1,4}\d{2}(?:\d{2})
如何?您说得很对,谢谢!匹配
1$0%11
@ctwheels修复了它。匹配
1$0%11
@ctwheels修复了它。