Ответ 1
Смотрите это регулярное выражение:
/^(?=.*Tim)(?=.*stupid).+/
Объяснение Regex:
-
^
Задает позицию в начале строки. -
(?=.*Tim)
Утверждает, что в строке присутствует "Тим". -
(?=.*stupid)
Утверждает, что в строке присутствует "глупо". -
.+
Теперь, когда наши фразы присутствуют, эта строка действительна. Идем дальше и используем.+
или -.++
для соответствия всей строке.
Для более эффективного использования lookaheads вы можете добавить еще одну группу (?=.*<to_assert>)
. Все регулярное выражение можно упростить как /^(?=.*Tim).*stupid/
.
Смотрите демо-версию regex!
>>> import re
>>> str ="""
... Tim is so stupid.
... stupid Tim!
... Tim foobar barfoo.
... Where is Tim?"""
>>> m = re.findall(r'^(?=.*Tim)(?=.*stupid).+$', str, re.MULTILINE)
>>> m
['Tim is so stupid.', 'stupid Tim!']
>>> m = re.findall(r'^(?=.*Tim).*stupid', str, re.MULTILINE)
>>> m
['Tim is so stupid.', 'stupid Tim!']
Подробнее: