我有一个字符串,例如:
" AB(abcds)kadf(SD)K(AFSD)(lbne)"
我想将其拆分为一个列表,以便列表存储如下:
a b
abcds
ķ
一个
d
˚F
SD
ķ
AFSD
lbne
我需要将括号外的元素放在单独的行中,将其中的元素放在单独的行中。 我无法想到解决这个问题的任何方法。
答案 0 :(得分:3)
您可以使用iter创建迭代器并使用itertools.takewhile来提取parens之间的字符串:
it = iter(s)
from itertools import takewhile
print([ch if ch != "(" else "".join(takewhile(lambda x: x!= ")",it)) for ch in it])
['a', 'b', 'abcds', 'k', 'a', 'd', 'f', 'sd', 'k', 'afsd', 'lbne']
如果ch
不等于(
,我们只需取其他字符,如果ch是(
我们使用takewhile,这将继续使用字符,直到我们点击)
或者使用re.findall
获取所有字符串以()
开头和结尾\
((。+?))`和所有其他字符:
print([''.join(tup) for tup in re.findall(r'\((.+?)\)|(\w)', s)])
['a', 'b', 'abcds', 'k', 'a', 'd', 'f', 'sd', 'k', 'afsd', 'lbne']
答案 1 :(得分:2)
您有两种选择。真正容易的就是迭代字符串。
in_parens=False
buffer=''
for char in my_string:
if char =='(':
in_parens=True
elif char==')':
in_parens = False
my_list.append(buffer)
buffer=''
elif in_parens:
buffer+=char
else:
my_list.append(char)
另一种选择是正则表达式。
我会建议正则表达式。值得实践
答案 2 :(得分:2)
你只需要使用' re.split'和一些逻辑。
import re
string = "ab(abcds)kadf(sd)k(afsd)(lbne)"
temp = []
x = re.split(r'[(]',string)
#x = ['ab', 'abcds)kadf', 'sd)k', 'afsd)', 'lbne)']
for i in x:
if ')' not in i:
temp.extend(list(i))
else:
t = re.split(r'[)]',i)
temp.append(t[0])
temp.extend(list(t[1]))
print temp
#temp = ['a', 'b', 'abcds', 'k', 'a', 'd', 'f', 'sd', 'k', 'afsd', 'lbne']
查看追加和扩展here的差异。 我希望这会有所帮助。
答案 3 :(得分:-1)
尝试:Python re。如果你是新手,可能需要一些时间,但是一旦你得到它就可以进行各种字符串操作。
import re
search_string = 'ab(abcds)kadf(sd)k(afsd)(lbne)'
re_pattern = re.compile('(\w)|\((\w*)\)') # Match single character or characters in parenthesis
print [x if x else y for x,y in re_pattern.findall(search_string)]