Вы можете сделать стартовые строки, которые должны включать свою собственную именованную группу, и присоединиться к двум именованным группам после совпадения.Поскольку начальные строки, которые должны быть включены, могут не совпадать и стать None
, вы можете использовать оператор or
, чтобы установить значение по умолчанию для пустой строки перед объединением с группой content
:
import re
start_pattern = "( StartString1 | StartString2 |(?P<start> StartString3ShouldBeIncluded | StartString4ShouldBeIncluded ))"
end_pattern = "( EndString1 | EndString2 )"
joined_pattern = f'{start_pattern}(?P<content>.*?){end_pattern}'
input1 = "...somejunk ... StartString1 THECONTENT EndString1 ...somejunk ... "
match = re.search(joined_pattern, input1)
output = (match.group('start') or '') + match.group('content')
print(output) # Prints 'THECONTENT' which is what I want
input2 = "...somejunk ... StartString3ShouldBeIncluded THECONTENT EndString2 ...somejunk ..."
match = re.search(joined_pattern, input2)
output = (match.group('start') or '') + match.group('content')
print(output) # Prints 'StartString3ShouldBeIncluded THECONTENT'