将字符串文字转换为字符串或引发错误,Python

时间:2013-11-12 22:25:05

标签: python parsing python-2.x

我有一个字符串,可能包含也可能不包含语法上有效的Python字符串文字。如果是,我想将它转换为它代表的字符串,否则我想引发一个错误。是否有更好的方式来完成此任务

# 'x' contains the putative string literal
s = ast.literal_eval(x)
if not isinstance(s, basestring):
    raise ValueError("not a valid string literal: " + x)

特别是,由于此字符串的来源,它可能包含复杂对象的repr,我不想浪费时间解析它然后将其丢弃。

另一种说法是,我希望floatint在应用于字符串时的行为,仅适用于字符串。

[注意:现有问题Python convert string literals to strings建议ast.literal_eval,但这是我希望能够击败的。]

1 个答案:

答案 0 :(得分:2)

我认为您可以使用正则表达式。语法上有效的Python字符串是:

  • ''在一行中包含除'之外的任何内容,前面有偶数\
  • ""在一行中包含除\n "之外的任何内容,前面有偶数\
  • """ """包含除"""之外的任何内容,前面有偶数\
  • ''' '''包含除'''之外的任何内容,前面有偶数\

从理论上讲,你应该能够写一个正则表达式来匹配其中一个,我认为这应该有用。

即使对于复杂的对象,它也可能不会比ast.literal_eval更快或更好。

现在我考虑一下,你可以这样做:

if x.lstrip().startswith(("'", '"')): #Might be a string

作为预过滤器。