我想转此:
mystr = ' foo1 (foo2 foo3 (foo4))'
成:
['foo1','foo2 foo3 (foo4)']
所以基本上我必须根据一些空格/制表符和括号进行拆分。
我已经看到repack split函数可以处理几个分隔符(Python: Split string with multiple delimiters),但我无法理解正确的方法来解析这种字符串。
哪种方法是最好的pythonic和简单方法?
答案 0 :(得分:4)
据我所知,这与你想要的一致,而且非常简单。它只是使用一些切片来隔离第一个单词和括号之间的部分。由于额外的空间,它还必须使用strip
几次。它可能看起来有点冗长,但说实话,如果任务可以通过这种简单的字符串操作完成,我觉得复杂的解析是不必要的(虽然我可能弄错了)。请注意,此 在要拆分的空白量方面具有灵活性。
mystr = ' foo1 (foo2 foo3 (foo4))'
mystr = mystr.strip()
i = mystr.index(' ')
a = mystr[:i].strip()
b = mystr[i:].strip()[1:-1]
print([a, b])
带输出
['foo1', 'foo2 foo3 (foo4)']
虽然我还不完全清楚这是否是你想要的。让我知道它是否有效或需要改变什么。
答案 1 :(得分:1)
如果你的字符串结构与你说的那样严格定义,你可以使用正则表达式来轻松地解析它:
import re
mystr = ' foo1 (foo2 foo3 (foo4))'
pattern = r'(\S+)\s+\((.*)\)'
match = re.search(pattern, mystr)
results = match.groups() # ('foo1', 'foo2 foo3 (foo4)')
如果您的真实输入没有像您提出的问题那样明确定义,请注意这种方法。正则表达式只能解析regular languages,括号通常的工作方式不是“常规”。在这个问题中,你只关心处理一个单集括号(最外面的),所以一个简单的贪婪匹配工作。将此解决方案调整为其他输入格式可能很难或不可能,即使它们看起来非常相似!
答案 2 :(得分:0)
[mystr.split(' ')[0].strip(),mystr.split(' ')[1][1:-1]]
简单的单行程。输出:
['foo1', 'foo2 foo3 (foo4)']