gpt4 book ai didi

python - 在 Python 中不在括号内的空格上拆分

转载 作者:行者123 更新时间:2023-11-28 22:30:37 26 4
gpt4 key购买 nike

我有几个字符串,如果不在括号内,我想用空格分隔。

例如

sentence = "blah (blah2 (blah3))|blah4 blah5"

应该产生

["blah", "(blah2 (blah3))|blah4", "blah5"]

我试过:

re.split(r"\s+(?=[^()]*(?:\(|$))", sentence)

但它产生:

['blah', '(blah2', '(blah3))|blah4', 'blah5']

最佳答案

如评论中所述,由于括号嵌套,无法使用正则表达式进行处理。

另一种方法是对括号进行嵌套计数的一些很好的旧字符串处理:

def parenthesis_split(sentence,separator=" ",lparen="(",rparen=")"):
nb_brackets=0
sentence = sentence.strip(separator) # get rid of leading/trailing seps

l=[0]
for i,c in enumerate(sentence):
if c==lparen:
nb_brackets+=1
elif c==rparen:
nb_brackets-=1
elif c==separator and nb_brackets==0:
l.append(i)
# handle malformed string
if nb_brackets<0:
raise Exception("Syntax error")

l.append(len(sentence))
# handle missing closing parentheses
if nb_brackets>0:
raise Exception("Syntax error")


return([sentence[i:j].strip(separator) for i,j in zip(l,l[1:])])

print(parenthesis_split("blah (blah2 (blah3))|blah4 blah5"))

结果:

['blah', '(blah2 (blah3))|blah4', 'blah5']

l 包含出现非括号保护空间的字符串的索引。最后,通过切片列表生成数组。

注意 strip() 最后处理多个分隔符的出现,并在开始时删除前导/尾随分隔符,这会在返回的列表中创建空项。

关于python - 在 Python 中不在括号内的空格上拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42070323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com