Maybe, an expression somewhat similar to:
\bgroup [\s\S]*? start\b[\s\S]*?\bgroup end\b
DEMO 1
or:
\bgroup .*? start\b.*?\bgroup end\b
DEMO 2
with a DOTALL flag might be working here.
Test with DOTALL:
import re
regex = r"\bgroup .*? start\b.*?\bgroup end\b"
test_str = """
group one start
line 1 data
group end
group two start
group two data
group end
"""
print(re.findall(regex, test_str, re.DOTALL))
Test without DOTALL:
import re
regex = r"(\bgroup [\s\S]*? start\b[\s\S]*?\bgroup end\b)"
test_str = """
group one start
line 1 data
group end
group two start
group two data
group end
"""
print(re.findall(regex, test_str))
Output
['group one start\nline 1 data\ngroup end', 'group two start\ngroup two data\ngroup end']
The expression is explained on the top right panel of regex101.com, if you wish to explore/simplify/modify it, and in this link, you can watch how it would match against some sample inputs, if you like.