Если у вас установлен модуль regex
:
(?<=\bWORKGROUP\s+\d+\.\s|,)\s*(.+?)\s*ID\d+\s*(?=,|$)
может работать нормально.
Если нет, вы можете просто сделать это в своем терминале, запустив:
$ pip install regex
или
$ pip3 install regex
Здесь мы предполагаем, что в вашем тексте могут присутствовать другие ID\d+
, в противном случае, если вы этого не сделаете, ваша проблема будет намного проще.
Тест
import regex as re
regex = r"(?<=\bWORKGROUP\s+\d+\.\s|,)\s*(.+?)\s*ID\d+\s*(?=,|$)"
test_str = '''
WORKGROUP 1. John Doe ID123, Jane Smith ID456, Ohe Keedoke ID7890
Situation paragraph 1
WORKGROUP 2. John Smith ID321, Jane Doe ID654
Situation paragraph 2
WORKGROUP 11. Bob Doe ID123, Alice Doe ID123, John Doe ID123, Jane Smith ID456, Ohe Keedoke ID7890
Situation paragraph 1
WORKGROUP 21. John Smith ID321, Jane Doe ID654
Situation paragraph 2
'''
subst = "[[\\1]]"
print(re.sub(regex, subst, test_str, 0, re.MULTILINE))
Вывод
WORKGROUP 1. [[John Doe]],[[Jane Smith]],[[Ohe Keedoke]]
Situation paragraph 1
WORKGROUP 2. [[John Smith]],[[Jane Doe]]
Situation paragraph 2
WORKGROUP 11. [[Bob Doe]],[[Alice Doe]],[[John Doe]],[[Jane Smith]],[[Ohe Keedoke]]
Situation paragraph 1
WORKGROUP 21. [[John Smith]],[[Jane Doe]]
Situation paragraph 2
Если вы хотите упростить / изменить / изучить выражение, это было объяснено в верхней правой панели regex101.com . Если хотите, вы можете также посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.