Обратите внимание, что ([a-zA-Z\s]+)+
явно человеческая ошибка - нет point в количественном определении группы, которая имеет один атом, который уже +
-quantified.
Если вы можете использовать модуль регулярных выражений PyPi вы можете использовать несколько неподвижных регулярные выражения и только доступ Группы 1 captures
:
>>> import regex
>>> pat = r"{{(?:\|\[\[([a-zA-Z\s]+)]])+}}"
>>> s = "{{|[[A]]|[[B]]|[[C]]}}"
>>> res = regex.fullmatch(pat, s)
>>> print(res.captures(1))
['A', 'B', 'C']
В противном случае, вы должны использовать 2-ступенчатый подход: 1) проверить, если целая строка соответствует шаблону, который вам нужен, и 2) используйте \|\[\[([a-zA-Z\s]+)]]
с re.findall
, чтобы получить несколько необходимых совпадений.
>>> res = []
>>> if re.search(r"^{{(?:\|\[\[([a-zA-Z\s]+)]])+}}$", s):
res = re.findall(r"\|\[\[([a-zA-Z\s]+)]]", s)
>>> print(res)
['A', 'B', 'C']
Из того, что я вижу, он возвращает всю строку, а не только букву. Вы хотите вернуть письмо? – BlackHatSamurai
Вам нужно ['\ \ \ [\ [([a-zA-Z \ s] +) \] \]'] (https://regex101.com/r/IBfGo6/1) и получить несколько совпадений. Какой язык программирования вы используете? Заметим, что '([a-zA-Z \ s] +) +' явно человеческая ошибка - нет смысла количественно определять группу, которая имеет один атом, который уже «+» количественно. –
Что, если строка была {{| [[A]] | [[B]] | [[C]]}}? – user3287037