Я пытаюсь написать код на Python, который будет соответствовать шаблону текста и сохранен в списке.
Ниже приведены примеры 3 строк из текстового файла:
FY20 Jan 8 Special Buy Event 592586642 - Dummy text Dummy text
Dummy text Dummy text Dummy text - 592586642, Dummy text Dummy text
FY20 Last Minute Gifts (Next Day/PUT) "364706825 - dummy text dummy text dummy text dummy text dummy text dummy text dummy text - 364706825 dummy text
FY20 Early Access 484015830 dummy text dummy text dummy text dummy text dummy text dummy text - 484015830 dummy text
Ниже приведено регулярное выражение, которое я использовал:
with open('test.txt', encoding="utf8") as f:
promo = []
item = []
for line in f:
#yo = re.findall('(FY20[\s\w]+)\t([0-9]+)', line)
yo = re.findall('(FY20[^\d+]*)+([0-9]*)', line)
try:
promo.append(yo[0][0])
item.append(yo[0][1])
except:
continue
Приведенный выше код соответствует всему до появления числа. Он отлично работает для последних 2 строк и сохраняет правильные результаты - тип промо и номер товара в списке. Тем не менее, для первой строки он соответствует только числу «8» и выдает пустой список для item
item = ['', '364706825','484015830']
promo = ['FY20 Jan\t', 'FY20 Jan 8 Special Buy Event\t','FY20 Last Minute Gifts (Next Day/PUT)\t', 'FY20 Early Access\t']
Я хочу, чтобы регулярное выражение совпадало со всем до определенного диапазонацифры встречаются.
item = ['592586642', '364706825','484015830']
promo = ['FY20 Jan 8\t', 'FY20 Jan 8 Special Buy Event\t','FY20 Last Minute Gifts (Next Day/PUT)\t', 'FY20 Early Access\t']
Не беспокойтесь об очистке результатов, сейчас мне нужны только правильные результаты
Я пытался использовать (FY20[^\d+]*)+([0-9]*)
и (FY20[^\\d{3,18}]*)+([0-9]*)
и многие другие. другие, но не нашли способ пройти через все. Нужно ли использовать условные операторы if-else
, чтобы соответствовать этому шаблону?