Точное соответствие pattern в string

У меня есть pattern="МАШИНА". Строка, в которой нужно искать равна, например, "ВОРОНА, МАШИНАН, МАШИНА", либо "МАШИНАН, МАШИНА". Может быть и 3 разных слова, но pattern остается тем же. Алгоритм идет по таким строкам построчно, то есть проверяет, есть ли МАШИНА в строке "ВОРОНА, МАШИНАН", далее в строке "ЗАЯЦ, МАШИНАН" и валится на том, что берет первую строку, хотя должен вторую по точному соответствию.

Мне нужно проверить, входит ли в точности pattern в string. Оператор in не работает, поскольку он проверяет посимвольно и вернет не ту строку. Мне нужно именно точное соответствие. Пробовал через re.search(pattern=f"\s^{name}$\s", string=string), но в регулярных выражениях не силен, а времени в данный момент разбираться нет. Как написать правильное регулярное выражение / Или есть решение, которое работает быстрее

Минимально воспроизводимый пример

import re


def main():
    strings = [
        "300С",
        "300СА",
        "350СБ, 200А",
        "300Б, 200БД",
        "300Б, 200Б"
    ]

    pattern = "200Б"

    # Выведет первую строку, но мне нужна вторая, то есть 300Б, 200Б
    # Строка может прилететь и "200Б, 300Б". Нужно точное соответствие 
    for string in strings:
        if re.search(pattern=f"{pattern}", string=string):
            print(pattern, "---", string)
            return "Success"


if __name__ == "__main__":
    main()

Ответы (2 шт):

Автор решения: Эникейщик

Все понятно. f"\W(МАШИНА)\W" у вас не работало, потому что у вас паттерн в конце строки, а \W конец строки не учитывает. Вот так должно работать:

pattern=f"(^|\W){pattern}(\W|$)"
→ Ссылка
Автор решения: CrazyElf

Используйте такой шаблон:

pattern=fr"\b{pattern}\b"

Объяснение: \b - это шаблон для границы слова.
Но кроме того обратные слэши нужно либо экранировать ещё одним бэкслэшэм, либо использовать "сырые" r-строки.

→ Ссылка