我一直在开发一个从括号中提取文本的程序。。我想做的是在迭代时忽略字符串中的特定索引。。。
string="[x+[y]w+3333]"
lst1=[n1 for n1 in range(len(string)) if string.find("[", n1) == n1]
lst1.sort(reverse=True)#since the iteration begins with the "[" of highest index the list must be arranged in descending order
def find_brack2(brackplace):
lst2=[n2 for n2 in range(len(string[brackplace:]))
if string[brackplace:].find("]", n2) == n2]
lst2.sort()
return (lst2[0]+brackplace)#returns the nearest "]"
lst=[]
for brack1 in lst1:
mainstring=string[brack1+1:find_brack2(brack1)]
lst.append(mainstring)
print(lst)
输出:
['y', 'x+[y']
↑
正如你所看到的,这会导致一个问题。我想在遍历字符串时忽略string [brack1:find_brack2(brack1)+1]
处的字符串。。。。。任何帮助都将不胜感激。。。
您可以使用Python中的re
模块来忽略子字符串中的括号,这些括号是基于函数返回的索引获得的。
string="[x+[y]w+3333]"
lst1=[n1 for n1 in range(len(string)) if string.find("[", n1) == n1]
lst1.sort(reverse=True)#since the iteration begins with the "[" of highest index the list must be arranged in descending order
def find_brack2(brackplace):
lst2=[n2 for n2 in range(len(string[brackplace:]))
if string[brackplace:].find("]", n2) == n2]
lst2.sort()
return (lst2[0]+brackplace)#returns the nearest "]"
lst=[]
for brack1 in lst1:
print(brack1)
print(find_brack2(brack1))
mainstring=''.join(re.findall(r'[0-9a-zA-Z+]', string[brack1+1:find_brack2(brack1)]))
lst.append(mainstring)
print(lst)
你得到的输出是:
['y', 'x+y']