返回多个匹配组

时间:2016-11-12 21:57:39

标签: python regex

试图找到一种方法来返回'A','B'和'C'。

我尝试使用以下正则表达式:

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

表示字符串:

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

但到目前为止收效甚微。

非常感谢。

2 个答案:

答案 0 :(得分:2)

请注意,([a-zA-Z\s]+)+显然是人为错误 - 量化已经+量化的单个原子的群体没有意义。

如果您可以使用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']

否则,您将不得不使用两步法: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 :(得分:1)

使用正则表达式\|\[\[[a-zA-Z\s]+\]\](不重复)并查找多个匹配项,在每个匹配项中,您将找到包含该字母的第一个组:http://regexr.com/3eksj