Найти совпадение выражения в строке
Есть разные строки, в них нужно найти совпадение выражения по маске:
строковая переменная_4цифры-2цифры-2цифры
str1 = 'NUMBER_2021-05-01_5690_LOCK'
str2 = 'NUMBER_OVER_2021-02-01_2100_LOCK'
str_find = 'NUMBER'
re.search(f'{str_find}_\d{4}-\d{2}-\d{2}', str1)
Что я делаю не так?
Ответы (3 шт):
Автор решения: CrazyElf
→ Ссылка
А не то здесь вот что:
print(f'{str_find}_\d{4}-\d{2}-\d{2}')
Вывод:
NUMBER_\d4-\d2-\d2
У вас f-строка, поэтому фигурные скобки все исчезли - подставились значения из скобок. Можно починить, например, так:
print(re.search(f'{str_find}'+r'_\d{4}-\d{2}-\d{2}', str1))
Вывод:
<re.Match object; span=(0, 17), match='NUMBER_2021-05-01'>
Автор решения: MaxU
→ Ссылка
В качестве альтернативы можно экранировать фигурные скобки в регулярном выражении в "f-строке":
>>> print(re.search(f'{str_find}_\d{{4}}-\d{{2}}-\d{{2}}', str1))
<re.Match object; span=(0, 17), match='NUMBER_2021-05-01'>
Автор решения: Andy Pavlov
→ Ссылка
Есть еще старый вариант подстановки через %, который сработает в этом случае:
print(re.search('%s_\d{4}-\d{2}-\d{2}' % str_find, str1))