Чтобы получить желаемые совпадения, вы можете использовать класс символов для совпадения прописных или строчных букв k, например [Kk]
, или использовать re.IGNORECASE
.
Если вам не нужны значения в группе захвата для дальнейшей обработки вы можете сделать группу без захвата (?:
Чтобы сопоставить любые вхождения открывающей и закрывающей скобки с одним символом слова между ними, вы можете зафиксировать совпадение в группе и повторить группу 0 или более раз.
\b123[Kk](?:\(\w\))*
Пояснение
\b123
Совпадение 123, которому предшествует граница слова, чтобы оно не входило в большее слово [Kk]
Соответствует верхнему или нижнему регистру k (?:
Группа без захвата \(\w\)
Соответствует символу слова в скобках
)*
Закрыть группировать и повторять 0+ раз
Regex demo
Пример кода
import re
regex = r"\b123k(?:\(\w\))*"
s = "blah blah blah 123K blah blah 123k blah blah 123K(1)(e) 123k(z)(1)"
print(re.findall(regex, s, re.IGNORECASE))
Выход
['123K', '123k', '123K(1)(e)', '123k(z)(1)']