2016-11-12 8 views
2

Попытка найти способ вернуть 'A', 'B' и 'C'.Возврат нескольких групп совпадений

Я попытался использовать следующее регулярное выражение:

{{(?:\|\[\[([a-zA-Z\s]+)+\]\])+}} 

для строки:

{{|[[A]]|[[B]]|[[C]]}} 

, но до сих пор мало успеха.

Большое спасибо.

+0

Из того, что я вижу, он возвращает всю строку, а не только букву. Вы хотите вернуть письмо? – BlackHatSamurai

+1

Вам нужно ['\ \ \ [\ [([a-zA-Z \ s] +) \] \]'] (https://regex101.com/r/IBfGo6/1) и получить несколько совпадений. Какой язык программирования вы используете? Заметим, что '([a-zA-Z \ s] +) +' явно человеческая ошибка - нет смысла количественно определять группу, которая имеет один атом, который уже «+» количественно. –

+0

Что, если строка была {{| [[A]] | [[B]] | [[C]]}}? – user3287037

ответ

2

Обратите внимание, что ([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'] 
+1

Отлично, спасибо. – user3287037

1

Используйте регулярное выражение \|\[\[[a-zA-Z\s]+\]\] (без повторений) и посмотреть на несколько матчей, где в каждом матче вы найдете первую группу содержать букву: http://regexr.com/3eksj

+0

Новое в этом ... Попытка извлечь содержимое в квадратных скобках из строки, например {{| [[A]] | [[B]] | [[C]]}} , в то время как проверка того, что строка следует этому шаблону. – user3287037

+0

@bobblebubble фиксированный tnx, просто взял оригинал – Uriel

Смежные вопросы