试图找到一种方法来返回'A','B'和'C'。
我尝试使用以下正则表达式:
{{(?:\|\[\[([a-zA-Z\s]+)+\]\])+}}
表示字符串:
{{|[[A]]|[[B]]|[[C]]}}
但到目前为止收效甚微。
非常感谢。
答案 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