【发布时间】:2015-06-19 04:38:17
【问题描述】:
我的字符串如下所示:
string = "*[EQ](@[Type],'A,B,C',@[Type],*[EQ](@[Type],D,E,F))"
理想的输出列表是:
['@[Type]', 'A,B,C', '@[Type]', '*[EQ](@[Type],D,E,F)']
所以我可以将字符串解析为:
if @[Type] in ('A,B,C') then @[Type] else *[EQ](@[Type],D,E,F)
挑战是找出所有跟在@、' 或* 后面的逗号。我已经尝试了以下代码,但它不起作用:
interM = re.search(r"\*\[EQ\]\((.+)(?=,@|,\*|,\')+,(.+)\)", string)
print(interM.groups())
编辑:
最终目标是解析出输入字符串的4个组成部分:
*[EQ](Value, Target, ifTrue, ifFalse)
【问题讨论】:
-
第一个
*EQ(去哪里以及为什么去了? -
您的输入似乎是一个嵌套结构,这是正则表达式不适合的工具。请:用抽象术语解释其语法或:显示并确认您正在处理的所有变体。
-
@Tomalak 添加了更多信息。你能解释一下为什么 RE 可能不是嵌套结构的好工具吗?抱歉,我是 python 新手,这个问题似乎有点傻......
-
如果表达式之间缺少逗号,预期的行为是什么?
-
@Nip 正则表达式无法捕获嵌套。这是一个技术限制。如果您的
ifFalse可以包含无限级别,则正则表达式将无法捕获正确的结束引号。有关更多解释和替代方案,请参见此处:stackoverflow.com/questions/1099178/…。如果您四处搜索,有很多帖子讨论正则表达式和嵌套输入。