Python re.findall возвращает только первый символ

1

Работая в 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. Что мне не хватает?

Теги:
python-3.x
regex-lookarounds

1 ответ

3
Лучший ответ

Вы можете упростить свой шаблон, чтобы использовать \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']

Ещё вопросы

Сообщество Overcoder
Наверх
Меню