如何解析一个简单的引用字符串(处理转义)

时间:2014-02-10 00:06:59

标签: python

注意:我知道这应该是非常简单的。不是。或者我很蠢。但我努力了。

我想做的很简单。我有一个字符串,里面有字符串,用,分隔,引用'。我想解析他们。考虑是否存在\'\\ s。

我想以最简单,优雅和巧妙的方式做,显然。

现在,尝试一些失败的尝试:

  • “我知道,我会用json!”不,JSON使用"。太糟糕了。
  • 嗯,一个正则表达式?这看起来像寻找麻烦,但是......哦,天啊,我的眼睛,我从互联网上得到的那些正则表达!至少他们......没有,没有逃脱的支持。
  • shlex! Python标准库总是有一个解决方案!请参阅下面的失败尝试。
  • 当前状态:抽泣,写一个解析器。

测试输入:'xx\'x,x\\x"xx\\\'\\',1,2,'xx\'x\''
测试输出:xx'x,x\x"xx\'\12xx'x'

def split(s):
    import shlex
    lex = shlex.shlex(s, posix=True)
    lex.whitespace = ','
    lex.whitespace_split = True
    lex.commenters = ''
    return list(lex)

1 个答案:

答案 0 :(得分:1)

做到了。我之前看过csv,但我需要大量定制它。这是函数

def parse_quoted_strings_list(s):
    import csv
    return next(csv.reader([s],
        skipinitialspace=True,
        quoting=csv.QUOTE_NONNUMERIC,
        escapechar='\\',
        doublequote=False,
        quotechar="'"))

以下是测试

>>> test = r"""'xx\'x,x\\x"xx\\\'\\',1,2,'xx\'x\''"""
>>> map(print, parse_quoted_strings_list(test))
xx'x,x\x"xx\'\
1.0
2.0
xx'x'