私は、文字列のリストを含む文字列であるユーザー入力(Pythonの組み込みのinput
を使用しない)を取り込むプログラムをPythonで書いています。 '["hello", "world"]'
。しかし、いくつかの入力は、内部に複数の引用符を持ちます。 '["Hello", "wor"ld"]'
。リストには常にeval()
という文字列が必要です。入力文字列をクレンジングして常に評価するようにするためのアドバイスはありますか?既に試した.replace('"', '\"')
。引用符内の評価リスト
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. F#で引用符で囲まれた式を評価する
- 2. 評価引数
- 3. 引用符内のXML引用符
- 4. 引用符内引用符問題
- 5. 評価の範囲内のExcel評価
- 6. purrrリストの評価strangeness
- 7. 評価の一覧をjavaのストリームを使用した平均評価のリスト
- 8. ggplot2内の式の評価
- 9. レール内の星評価システム
- 10. 未評価のtcl引数の取得
- 11. 一重引用符をリストの二重引用符に置き換えたい
- 12. gensymシンボルのリスト内でマクロが評価されない
- 13. Pythonでリスト内のタプルを評価する方法は?
- 14. JavaScriptの文字列内の単一引用符と二重引用符に
- 15. ASP.NET:リテラルのテキストプロパティ内の一重引用符と二重引用符
- 16. spring.netの式の評価-spel-リスト反復
- 17. 〜/ .bash_profileエイリアスのpwdの別の評価は、引用符のタイプによって異なります。
- 18. JavaScriptの評価のためにJavaScript文字列の一重引用符をエスケープする
- 19. 配列内の文字列、引用符または引用符なし
- 20. TensorFlow in_top_k評価入力引数
- 21. ブールメソッドのリストを評価するruby
- 22. 引用符内にエスケープされた引用符でREGEXを使用する
- 23. なぜPythonのすべての文字列リテラルが一重引用符に評価されますか?
- 24. 文字列内の引用符
- 25. 一重引用符内の補間
- 26. 文字列内の引用符
- 27. Rプログラミング:評価のエラー:未使用の引数
- 28. PowerPackからの合成引用式の評価エラー
- 29. sqlalchemy評価基準タプルのリストに基づいた評価基準?
- 30. フィードバック評価の星の評価
まず第一に... 'eval'を使用しないでください。 –
あなたは' json.loads'を使う方が良いです。また、私はあなたの頭を壊すよりもエラーをスローすることをお勧めします。ユーザーがそのような入力を入力しようとしている場合、彼らは馬鹿にしている可能性があります。 –
文字列にランダムに散在した二重引用符がありますか?それは一般的なケースで対処するのには非常に問題になるでしょう。 –