次のステートメントを文字列として指定します
stmt = "insert into table (col1, col2, col3) values (100, '() string with parantheses ()', 2.3);"
["(col1, col2, col3)", "(100, '() string with parantheses ()', 2.3)"]
後で列の名前と値を辞書に入力できるように、その文字列をリストに分割するための正規表現(または、より適切なものがある場合は他の方法)を見つけようとしています。
d = { "col1" : "100", "col2" : "'() string with parantheses ()'", "col3" : "2.3" }
これまでのところ、私は好きではない次の解決策があります(または、同じことをするためだけに正規表現を使用する解決策があると信じています)。
re.findall("\([^\r\n]*\)", stmt)[0].split("values")
# from here on I would have to parse the two strings and fill a dict
'values'
正規表現のみを使用して文字列を分割する必要がない解決策を見つけることができません。私の主な問題は、値がある2番目の括弧文字列に文字列に括弧が含まれている可能性があることです。
ステートメントが常に同じ形式である場合は、いくつかの基本的な文字列操作を使用しast.literal_eval
て値を評価できます...これもint、str、floatのタイプの値になることに注意してください。
import ast
import csv
stmt = "insert into table (col1, col2, col3) values (100, '() string with parantheses ()', 2.3);"
pre, values = stmt.rstrip(';').partition(' values ')[::2]
cols = pre.partition('(')[2]
d = dict(zip(cols.rstrip(')').split(', '), ast.literal_eval(values)))
これはあなたに与えるでしょう:
{'col1': 100, 'col2': '() string with parantheses ()', 'col3': 2.3}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加