Вы можете немного реорганизовать шаблон, включив правый разделитель и добавив необязательную группу (?:\s*.)?
:
def findStringsInMiddle(a, b, text):
return re.findall(re.escape(a)+"(.*?"+re.escape(b) + r"(?:\s*.)?)",text, flags=re.S)
Шаблон будет выглядеть как ;(.*?,(?:\s*.)?)
(см. демонстрация регулярного выражения ) и будет соответствовать:
;
- левый разделитель (.*?,(?:\s*.)?)
- Группа 1: .*?
- любой ноль или более символов, как можно меньше
,
- запятая (?:\s*.)?
- необязательная группа без захвата соответствует 1 или 0 вхождения 0+ пробелов, а затем любые символы.
Примечание. Я добавил флаг re.S
, чтобы .
соответствовал символам разрыва строки.
Seee full Python фрагмент ниже :
import re
example_string = "; One, one; Two, two; Three, three; Four, four"
desired_output = ["One, o", "Two, t", "Three, t", "Four, f"] #list output is OK
def findStringsInMiddle(a, b, text):
return re.findall(re.escape(a)+"(.*?"+re.escape(b) + r"(?:\s*.)?)",text, flags=re.S)
desired_output = findStringsInMiddle('; ' , ',' , example_string)
print(desired_output)
# => ['One, o', 'Two, t', 'Three, t', 'Four, f']