example_string = "name[0]['subName'][0][1]"
我想要[和]
之间的子字符串和整数列表结果将是
[0, 'subName', 0, 1]
我相信re.findall()会起作用,但我不确定正则表达式是什么
答案 0 :(得分:7)
re_results = re.findall("\[(.*?)\]",example_string)
...可能适合你(假设你没有嵌套括号)......我怀疑你缺少的关键是使用贪婪的比赛" [。]&#34 ;将匹配尽可能大,因此它捕获从第一个开放括号到最后一个关闭括号的所有内容作为单个匹配。 " [?]"匹配尽可能少,因此每个匹配只有一个括号对
(你需要手动转换为整数,如果那是你真正想要的)
你可以做一些简单的事情,比如
def castIntOrDont(x):
try:
return int(x)
except ValueError:
return x.strip("'") #strip out the extra quotes on strings
print map(castIntOrDont,re_result) #list(map(...)) in py3
答案 1 :(得分:4)
如果你知道索引是单引号字符串或整数,你可以使用这个列表理解:
[ g[1:-1] if i else int(g)
for m in re.finditer(r"\[(?:(\d+)|('.*?'))\]", example_string)
for i, g in enumerate(m.groups()) if g is not None ]
输入中的所有匹配项:
for m in re.finditer(r"\[(?:(\d+)|('.*?'))\]", example_string)
对于每个匹配:i=0
表示整数替代,或i=1
表示替换字符串:
for i, g in enumerate(m.groups()) if g is not None
剥离引号或强制转换为整数:
g[1:-1] if i else int(g)