【发布时间】:2014-01-08 07:08:22
【问题描述】:
我想输入一个具有某种形式的字符串输入(可能会有所不同)
aString = "foo1(bar1(foo2bar2)) foo3(bar3)"
我想使用某种会返回的正则表达式
[[foo1, (bar1(foo2bar2))], [foo3, (bar3)]]
实际的字符串由字母、数字、空格和括号组成。我首先使用aString.split() 将其按空格分开,然后用外括号将每个部分分开。我到目前为止是这样的:
import re
aString = "foo1(bar1(foo2bar2)) foo3(bar3)"
aList = aString.split()
newList = []
for part in aList:
index1 = part.find('(')
index2 = part.rfind(')')
aLen = index2 - index1 - 1
prog = re.compile(r'(\(.{,aLen}\))')
newList.append(prog.split(part))
print newList
返回这个:
[['foo1(bar1(foo2bar2))'], ['foo3(bar3)']]
我对这种形式的正则表达式的理解是,. 将匹配所有字符串,{,aLen} 将匹配前一个正则表达式的零和 aLen 重复,在本例中为 . 或所有字符串。但是,正如您所看到的,它似乎并没有这样做,因为正在运行
newList.append(prog.match(part)) 而不是newList.append(prog.split(part))
返回[None, None]
我在正则表达式方面没有太多经验,所以我肯定会误解不同的正则表达式的含义或它们的工作原理。
任何帮助将不胜感激!
【问题讨论】:
-
那么你想要的是一个接受 Fname(args) 并将其转换为 [[fname, args],[other_fname, [nested_fname, args]] 等...] 的东西?跨度>
-
@OmegaOuter 否。我想采用上面显示的形式的字符串,或者在下面的答案的 cmets 中,并返回所有括号的内部而不删除括号。括号的位置和数量会有所不同(它们总是会打开和关闭),括号之间区域的内容/长度也会有所不同。
-
嗯,我确实阅读了下面的 cmets,我真诚地预期两者的预期结果是不同的。在原始问题中,您不执行嵌套遍历,就像在下面的问题中那样,在第一个问题中,您可能会采用任意数量的表达式。我认为您应该编辑原始问题以解决您正在寻找的确切行为。
标签: python regex string python-2.7