引号内的评估列表

2024-04-25 17:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写一个程序,它接受用户输入(不使用Python的内置input),用户输入是一个包含字符串列表的字符串,即'["hello", "world"]'。但是,有些输入中会有多个引号,即'["Hello", "wor"ld"]'。我需要字符串总是eval()到列表。有没有关于清理输入字符串以确保它总是求值的建议?已尝试.replace('"', '\"')。在


Tags: 字符串用户程序hello列表worldinputeval
2条回答

我几乎讨厌自己这样做,但它可能真的有用。首先,选择一个永远不会被用户输入的符号(例如,字或~)。然后,删除末尾开头的有效引号,并将项目之间的所有有效引号替换为该符号:

s = '["Hello", "wor",ld"  , " ]'
s1 = re.sub(r"(\[\s*\")|(\"\s*,?\s*\])", "", s)
# 'Hello", "wor",ld"  , '
s1 = re.sub(r"\"\s*,\s*\"", "字", s1)
# 'Hello字wor",ld"  , '

最后,转义所有剩余的双引号,用项目分隔符替换有趣的符号,并添加括号:

^{pr2}$

这是一个有点困难的问题,因为计算机很难知道哪些引用是无关的,哪些是有意引用的。我能想到的最好的解决方案是首先删除所有的双引号和空格,然后在“[”字符的任何实例后面添加双引号,在任何逗号后插入空格和双引号,在每个逗号和“]”之前插入双引号。这不是一个优雅的解决方案,可能需要几行代码,但除非您可以在程序的早期清理输入,否则这可能是最好的解决方案。在

相关问题 更多 >