文字列から日付っぽいものが含まれていれば取り出す

たとえば以下の文字列群があった場合、

180203
20180203
20180203050601
180203_050601
20180203_050601
180203050601
Image20180203050601
file180203.jpg

それぞれ”2018-02-03 00:00:00”というdatetimeオブジェクトを取得できるようにしたい
今回採用した方法は以下

# coding: UTF-8

import re
from datetime import datetime

f = open('timetest.txt') # 上記の文字列が記載されたファイル
lines = f.readlines()
f.close()

# 6桁の数字のマッチをすべて取得し、最初に日付に変換できたものを使用
# 初回マッチでループを抜ける

matchFlag = False

for line in lines:
    print('■for ', line.strip())
    # 6桁以上の最大桁数で数字マッチ
    imgdates = re.findall('(\d{6}\d*)', line)
    if imgdates: # 数字6桁(以上)がマッチした場合
        print(len(imgdates) ,' matched.')
        # マッチした文字列それぞれについて検証
        for imgdate in imgdates:
            # マーカーを一文字ずつ進めて、そこからの6桁の数字でマッチング
            for i in range(0,len(imgdate)-5):
                slicedstr = imgdate[i:i+6]
                print('in ', slicedstr)
                try:
                    dt = datetime.strptime(slicedstr, r'%y%m%d')
                except ValueError:
                    print('digits is not date')
                else:
                    print('date digits', dt)
                    matchFlag = True
                    break # imgdate走査
            if matchFlag:
                break # マッチ文字列群
        # if文は勝手にぬける
    # 文字列をイテレートしている最初のループは抜けない

1.6桁以上の数字列を最大長ですべて抜き出す
2. 抜き出した文字列に対して、先頭から順に6桁抜き出して、日付(%y%m%d=yymmdd)とマッチするか確認
3.初回マッチにてその文字列の処理を終了、次の文字列を検証する

といった仕組み。
出力は以下。

■for  180203
1  matched.
in  180203
date digits 2018-02-03 00:00:00
■for  20180203
1  matched.
in  201802
digits is not date
in  018020
digits is not date
in  180203
date digits 2018-02-03 00:00:00
■for  20180203050601
1  matched.
in  201802
digits is not date
in  018020
digits is not date
in  180203
date digits 2018-02-03 00:00:00
■for  180203_050601
2  matched.
in  180203
date digits 2018-02-03 00:00:00
■for  20180203_050601
2  matched.
in  201802
digits is not date
in  018020
digits is not date
in  180203
date digits 2018-02-03 00:00:00
■for  180203050601
1  matched.
in  180203
date digits 2018-02-03 00:00:00
■for  Image20180203050601
1  matched.
in  201802
digits is not date
in  018020
digits is not date
in  180203
date digits 2018-02-03 00:00:00
■for  file180203.jpg
1  matched.
in  180203
date digits 2018-02-03 00:00:00

ループ抜け処理に以下を参考にさせてもらった。
Pythonで多重ループ(ネストしたforループ)からbreak | note.nkmk.me