Ваш шаблон [^ i|like|to|drink][\w+](\s*)(\w*)
использует класс отрицательных символов , который будет соответствовать любому символу, который не входит в класс символов.
Я думаю, что вы хотели использовать структуру группировки, используя чередование с или |
, но это не даст вам желаемых совпадений.
Кажется, вы хотитечто последует за drink
.В этом случае вам не нужен просмотр сзади, а только группа захвата, в которой ваше значение находится в первой группе:
\bdrink\b\s+(.*)$
Regex demo
Если есть возможностьперед несколькими словами, которые вы хотите сопоставить, вы можете использовать чередование:
\b(?:drink|have)\b\s+(.*)$
Regex demo
Другой вариант - разделить слово "пить"между границами слова \b
import re
strings = ["i like to drink black tea", "drink tea", "drink pomegranate juice", "testdrinktest"]
for str in strings:
parts = re.split(r"\bdrink\b", str)
if len(parts) > 1:
print(parts[1])
Результат:
black tea
tea
pomegranate juice