我必须在 python 中解析输入字符串并从中提取某些部分。
字符串的格式是
(xx,yyy,(aa,bb,...)) // Inner parenthesis can hold one or more characters in it
我想要一个函数返回 xx、yyyy 和一个包含 aa、bb ... 等的列表
我当然可以通过尝试拆分括号和东西来做到这一点,但我想知道是否有适当的 pythonic 方法从字符串中提取此类信息
我有这段代码可以工作,但是有没有更好的方法(没有正则表达式)
def processInput(inputStr):
value = inputStr.strip()[1:-1]
parts = value.split(',', 2)
return parts[0], parts[1], (parts[2].strip()[1:-1]).split(',')
请您参考如下方法:
如果您对 RE 过敏,可以使用 pyparsing :
>>> import pyparsing as p
>>> ope, clo, com = map(p.Suppress, '(),')
>>> w = p.Word(p.alphas)
>>> s = ope + w + com + w + com + ope + p.delimitedList(w) + clo + clo
>>> x = '(xx,yyy,(aa,bb,cc))'
>>> list(s.parseString(x))
['xx', 'yyy', 'aa', 'bb', 'cc']
如果需要,
pyparsing 还可以轻松控制结果的确切形式(例如,将最后 3 项分组到它们自己的子列表中)。但我认为最好的方面是如何自然(取决于你想投入多少空间)你可以让“语法规范”阅读:一个开放的paren,一个词,一个逗号,一个词,一个逗号,一个开放的paren,一个分隔的单词列表,两个右括号(如果你发现上面对 s 的分配不太容易阅读,我想是我没有选择更长的标识符的错;-)。
