#python #list #search #substring
#python #Список #Поиск #подстрока
Вопрос:
Я хочу извлечь все даты внутри my_list
my_list = ['FRE_5F_20200915-08u21m57s_ab', 'AY_C7_20200813-17u02m16s_ab', 'ALL_20200915-06u34m05s_ab', 'FF_20200816-11u21m44s_ab']
Это мой код:
for file in my_list:
find = re.search('_(. ?)-', file).group(1)
print(find)
Это вывод:
5F_20200915
C7_20200813
20200915
20200816
Это мой ожидаемый результат:
20200915
20200813
20200915
20200816
Комментарии:
1.
_(. ?)-
точка будет соответствовать чему угодно. Вам просто нужны цифры. Вы получаете 5F_20200915, потому что возвращается самая длинная строка с маршем. Самым коротким совпадением будет 20200915.2. Верно, только что узнал, да. Спасибо
Ответ №1:
Вы можете использовать _(d )-
Regex101:
import re
my_list = ['FRE_5F_20200915-08u21m57s_ab', 'AY_C7_20200813-17u02m16s_ab', 'ALL_20200915-06u34m05s_ab', 'FF_20200816-11u21m44s_ab']
r = re.compile(r'_(d )-')
for s in my_list:
m = r.search(s)
if m:
print(m.group(1))
С принтами:
20200915
20200813
20200915
20200816
Комментарии:
1. Спасибо, кажется, работает, можете ли вы сказать мне, что именно вы сделали?
2. @NorthAfrican
_(d )-
Шаблон будет искать все цифры (0-9) между символами_
и-
. Смотрите здесь regex101.com/r/JHweC1/13. Ах, хорошо, это работает идеально, однако я думаю, что ответ goldwave немного проще!
Ответ №2:
Исправлено ваше регулярное выражение, ваш вывод соответствует вашему регулярному выражению. Чтобы сопоставлять только числа между _
и -
, вы можете использовать '_(d )-'
, как показано ниже
import re
my_list = ['FRE_5F_20200915-08u21m57s_ab', 'AY_C7_20200813-17u02m16s_ab', 'ALL_20200915-06u34m05s_ab', 'FF_20200816-11u21m44s_ab']
for file in my_list:
find = re.search('_(d )-', file).group(1)
print(find)
Что приводит к
20200915
20200813
20200915
20200816
Ответ №3:
Это можно сделать без регулярного выражения:
for s in my_list:
# find the index of -
index = s.index("-")
# extract 8 characters before that
print(s[index-8:index])