2017-10-17 56 views
0

我想分析一个字符串,它是逗号分隔的双引号字符串列表。起初(from pyparsing import *后)我尝试这样做:在PyParsing中,从解析结果中删除所有引号

In [36]: expression = delimitedList(dblQuotedString, delim=",") 

In [37]: expression.parseString('"foo","bar"') 
Out[37]: (['"foo"', '"bar"'], {}) 

这会产生预期的比赛,但不删除引号。所以,我想增加一个addParseAction(removeQuotes)

In [34]: expression = delimitedList(dblQuotedString, delim=",").addParseAction(r 
    ...: emoveQuotes) 

In [35]: expression.parseString('"foo","bar"') 
Out[35]: (['foo'], {}) 

这消除了对'foo'的报价,但现在'bar'结果丢失。我怎样才能表达这样的结果是(['foo', 'bar'], {})

回答

0

我发现我可以使用QuotedString对象,它的quoteChar设置为"。此对象自动删除引号:

In [40]: expression = delimitedList(QuotedString(quoteChar='"'), delim=',') 

In [41]: expression.parseString('"foo","bar"') 
Out[41]: (['foo', 'bar'], {}) 
+0

使用'removeQuotes'解析动作正确的方法是将其附加到'dblQuotedString'表达,而不是'delimitedList':'表达式= delimitedList(dblQuotedString.addParseAction( removeQuotes),delim =“,”)'但是使用'QuotedString'也可以。 – PaulMcG