lst = 'AB[CD]EF[GH]'
输出:[' A',' B'' CD',' E'' F' ,' GH']
这是我尝试过的,但它不起作用......
while(index < len(my_string)):
curr_char = my_string[index]
if(curr_char == '['):
while(curr_char != ']'):
multi = my_string[index + 1]
index += 1
lst += multi
有人可以帮忙吗?没有导入正则表达式或其他什么。我想在不使用它的情况下这样做。
答案 0 :(得分:2)
原始代码的问题似乎是:
1)lst,index和multi未初始化
2)循环是无限的,因为循环变量(索引)在每次迭代时都不会递增。
3)检测时需要跳过关闭括号以避免将其包括在最终列表中
此代码是如何解决这些问题的示例:
def getList(s):
outList=[]
lIndex=0
while lIndex < len(s):
if s[lIndex] == "[":
letters=""
lIndex+=1
while s[lIndex] != "]":
letters+=s[lIndex]
lIndex+=1
outList.append(letters)
else:
outList.append(s[lIndex])
lIndex+=1
return outList
print(getList('AB[CD]EF[GH]'))
答案 1 :(得分:1)
您无法使用
lst += multi
因为你不能将字符串与列表连接起来。
此外,您的代码进入无限循环,因为您没有更新内循环内的curr_char
变量,因此条件始终为True
。
此外,您在curr_char != '['
时没有处理此案例。还有更多的错误。
您可以使用此代码修复上述错误,同时使用与代码相同的基本逻辑:
index = 0
multi = ""
res = []
my_str = 'AB[CD]EF[GH]'
while (index < len(my_str)):
curr_char = my_str[index]
if curr_char == '[':
multi += curr_char
while curr_char != ']':
index += 1
curr_char = my_str[index]
multi += curr_char
res.append(multi)
multi = ""
else:
res.append(curr_char)
index += 1
print(res)
输出:
['A', 'B', '[CD]', 'E', 'F', '[GH]']
答案 2 :(得分:0)
请尝试以下代码段。
my_string = 'AB[CD]EF[GH]'
lst = []
ind = 0
n = len(my_string)
while (ind < n):
if my_string[ind] == '[':
# if '[' is found, look for the next ']' but ind should not exceed n.
# Your code does not do a ind < n check. It may enter an infinite loop.
ind += 1 # this is done to skip the '[' in result list
temp = '' # create a temporary string to store chars inside '[]'
while ind < n and my_string[ind] != ']':
temp = temp + my_string[ind]
ind+=1
lst.append(temp) # add this temp string to list
ind += 1 # do this to skip the ending ']'.
else:
# If its not '[', simply append char to list.
lst.append(my_string[ind])
ind += 1
print(lst)