Это выражение,
(?=:.*\bdear\b):\s*(.*)
может работать здесь.
Выражение объяснено на верхней правой панели этой демонстрации , если вы хотите продолжить изучение или изменить его, а в этой ссылке вы можете посмотреть, какесли хотите, он пошагово будет сопоставляться с некоторыми примерами входных данных.
Тест с re.findall
import re
regex = r"(?=:.*\bdear\b):\s*(.*)"
test_str = ("Expression: It's been a while man.\n"
"Expression: How have you been moron?\n"
"Expression: Good to see you dear.\n"
"Greeting: How is everything dear?\n"
"Greeting: Hi dear, how are you?\n"
"Greeting: Hi dear, how are you?\n"
"dear: Hi there, how are you?")
print(re.findall(regex, test_str))
Тест с re.finditer
import re
regex = r"(?=:.*\bdear\b):\s*(.*)"
test_str = ("Expression: It's been a while man.\n"
"Expression: How have you been moron?\n"
"Expression: Good to see you dear.\n"
"Greeting: How is everything dear?\n"
"Greeting: Hi dear, how are you?\n"
"Greeting: Hi dear, how are you?\n"
"dear: Hi there, how are you?")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))