Python re.findall возвращает только первый символ
Работая в Python 3.6, у меня есть список HTML-файлов с префиксами даты. Я хотел бы вернуть все даты, поэтому я присоединяюсь к списку и использую некоторое регулярное выражение, например:
import re
snapshots = ['20180614_SII.html', '20180615_SII.html']
p = re.compile("(\d|^)\d*(?=_)")
snapshot_dates = p.findall(' '.join(snapshots))
snapshot_dates
это список, ['2', '2']
но я ожидаю ['20180614', '20180615']
, Демонстрация здесь: https://regexr.com/3r44o. Что мне не хватает?
1 ответ
Решение
Вы можете упростить свой шаблон для использования \d+
вместо (\d|^)\d*
:
p = re.compile("\d+(?=_)")
print(p.findall(' '.join(snapshots)))
#['20180614', '20180615']
Однако в этом случае вам может не понадобиться regex
достичь желаемого результата. Вместо этого вы можете просто разбить строку на _
:
print([x.split("_")[0] for x in snapshots])
#['20180614', '20180615']