我有一个字符串,我正在尝试为其创建正则表达式,以便提取括号内的所有内容。这样的字符串的示例如下
[-At(A),+CarAt(B),-CarAt(A),-InCar]
我正在使用的当前正则表达式为re.search(r'\[.*?\]', string)
,但这只会返回-At(A),-InCar
而不是-At(A),+CarAt(B),-CarAt(A),-InCar
我不确定为什么它与-At(A)
中的一组括号匹配;我以为我可以使用正则表达式,因为它可以匹配方括号之间的所有内容。
如何将所有内容放在原始字符串的括号内?
答案 0 :(得分:1)
我认为问题出在问号。因为问号,当它们后面有一个量词时,会使它们“懒惰”。 因此,请尝试使用:
r'\[.*\]'
答案 1 :(得分:0)
您没有说您想要被约束的成员,但我怀疑这是最终的情况
为此,我发现最好先切成薄片或用.strip()
括起来,然后再.split()
这种字符串来获得其成员,然后再进行进一步的验证
>>> s = "[-At(A),+CarAt(B),-CarAt(A),-InCar]"
>>> s = s.strip('[]')
>>> s
'-At(A),+CarAt(B),-CarAt(A),-InCar'
>>> values = s.split(',')
>>> values
['-At(A)', '+CarAt(B)', '-CarAt(A)', '-InCar']
通常使用正则表达式来验证其单个结果
>>> import re
>>> RE_wanted = re.compile(r"[+-](At|Car|In){1,2}(\([A-Z]\))?")
>>> all((RE_wanted.match(a) for a in values))
True