Найти совпадение выражения в строке

Есть разные строки, в них нужно найти совпадение выражения по маске:

строковая переменная_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))
→ Ссылка