我正在編寫一個Python中的程序,它接受用戶輸入(不使用Python的內置input
),它是一個包含字符串列表的字符串,即。 '["hello", "world"]'
。但是,一些輸入內部會有多個引號,即。 '["Hello", "wor"ld"]'
。我需要字符串總是eval()
到一個列表。任何關於清理輸入字符串的建議,以確保它始終是eval?已經嘗試過.replace('"', '\"')
。引用中的Eval列表
0
A
回答
0
這是一個有些困難的問題,因爲計算機很難知道哪些引用是無關的,哪些是預期的引用。我能想到的最佳解決方案是首先刪除所有雙引號和空格,然後在任何字符「[」的實例後加雙引號,在任何逗號後插入空格和雙引號,並在雙引號之前插入雙引號每個逗號和「]」。這不是一個優雅的解決方案,可能需要幾行代碼,但除非您可以在程序的早期對輸入進行清理,否則這可能是最佳解決方案。
0
我幾乎恨自己這樣做,但它可能實際上工作。首先,選擇一個不會被用戶輸入的符號(例如,字或〜)。然後,通過符號刪除有效引號在末開始和更換項目之間的所有有效引號:
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" , '
最後,逃避所有剩餘的雙引號,與項分隔更換有趣的符號,並添加括號:
result = '["' + s1.replace('"', r'\"').replace("字",'","') + '"]'
#'["Hello","wor\\",ld\\" , "]'
ast.literal_eval(result)
#['Hello', 'wor",ld" , ']
相關問題
- 1. eval中的matlab索引
- 2. 在makefile中eval上的列表
- 3. ScriptEngine eval中的引用錯誤
- 4. 使用列表中的值使用eval函數的問題
- 5. 引用列表中的列表
- 6. 使用Eval綁定下拉列表
- 7. Python中的列表引用
- 8. EVAL列表到一個讓上Clojure的
- 9. 如何使用eval將用戶輸入放入列表中?
- 10. 安全Python中的eval「列表反序列化
- 11. 取消引用散列元素中的列表引用
- 12. 如何在字符串列表中使用eval語句?
- 13. 網絡引用中的通用列表
- 14. 錯誤的eval(表達式,ENVIR,enclos):使用eval
- 15. 猛砸EVAL引號內
- 16. 如何使用R中的「eval」指定列表中的變量名稱?
- 17. 用於陣列創建的Eval備選
- 18. (SyntaxError):missing]使用eval時的元素列表
- 19. 如何在評估列表時防止Python的eval()使用「...」?
- 20. 引用SELECT列表jQuery的
- 21. 被引用表中的列無效
- 22. 引用列表中的位置
- 23. 避免INDIRECT()引用Excel表中的列
- 24. 在Python中的列表,帶有引用
- 25. Excel中表格的引用子集(列)
- 26. 刷新ng-admin中的引用列表
- 27. 如何蟒蛇引用列表中的
- 28. 引用元組列表中的元素
- 29. Python中的引用類型列表
- 30. 如何訪問列表中的引用?
首先...不要使用'eval' ... –
你最好使用'json.loads'。此外,我會建議你拋出一個錯誤,而不是打破你的頭。如果用戶將要輸入這樣的內容,那麼他們很可能會在周圍徘徊。 –
那麼,在字符串中是否有隨機散佈的雙引號字符呢?在一般情況下處理這將會有很大的問題。 –