0

我有一个字符串,它可能包含也可能不包含语法上有效的 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,但这是我希望能够击败的。]

4

1 回答 1

2

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

  • ''在一行上包含除'偶数之外的任何内容\
  • ""在一行上包含除\n "偶数之外的任何内容\
  • """ """包含"""除以偶数开头之外的任何内容\
  • ''' '''包含'''除以偶数开头之外的任何内容\

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

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

现在我考虑一下,您可以简单地执行以下操作:

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

作为前置过滤器。

于 2013-11-12T22:32:46.617 回答