0

Python 正規表現ライブラリを使用して Wikipedia SQL ダンプを解析しようとしています。最終的な目標は、このダンプを PostgreSQL にインポートすることですが、事前に文字列のアポストロフィを 2 つにする必要があることはわかっています。

ただし、このダンプの文字列内のすべてのアポストロフィの前にはバックスラッシュがあり、バックスラッシュは削除したくありません。

(42,'Thirty_Years\'_War',33,5,0,0)

コマンドの使用

re.match(".*?([\w]+?'[\w\s]+?).*?", line)

'line' をテキスト ファイルから解析すると、'Thirty_Years\'_War' の途中にあるアポストロフィを識別できません。

比較のために、これらの行は解析時に正常に機能します (最後の行は除きます)。

その人の車

その人の車のガソリン

ホッジスのハーブレース ハンドブック

「ホッジス・ハーブレイス・ハンドブック」

ポートピープル',1475,29,0,0),(42,'Thirty_Years\'_War',33,5,0,0)

正しい出力と予想される出力 (最後の行は省略):

その人の車

その人の車のガソリン

ホッジスのハーブレース ハンドブック

(「ホッジス」ハーブレース ハンドブック)

ポートピープル',1475,29,0,0),(42,'Thirty_Years\'_War',33,5,0,0)

コマンドの使用

re.match(".*?([\w\\]+?'[\w\s]+?).*?", line)

それを壊します。

その人の車

その人の車のガソリン

ホッジスのハーブレース ハンドブック

(''''''''Hodges'''''''' Harbrace Handbook'''''''')

ポートピープル'''''''''''''',1475,29,0,0),(42,'''''''''''''''Thirty_Years\'' ''''''''''''''_戦争''''''''''''''',33,5,0,0)

ある種のループに陥っていませんか?使用する正しい正規表現コードは何ですか?

このスクリプトはウィキペディアの記事 (SQL インジェクション攻撃の例を含まない) のダンプを解析するためにのみ使用されるため、SQL インジェクション攻撃については考えていません。

4

2 に答える 2

1

ダンプがあなたが提供した文字列のようなもので構成されている場合、次のようなことを試すことができます:

re.findall(r"[^,\(\)]+")

文字クラスには、すべての既知のセパレーターが含まれています。

編集:より良い方法がない場合にのみ、解析に正規表現を使用してください:)

于 2012-08-08T01:10:06.243 に答える
0

ほとんどの Python データベース インターフェイスは、SQL ステートメントの引用を処理します。たとえば、psycopgドライバーでは、次のように記述します。

mystring="""This is 'a string' that contains single quotes."""
c.execute('INSERT INTO mytable (mycolumn) VALUES (%s)', mystring)

...そして、データベース ドライバが値を正しく引用してくれます。ドキュメントのいくつかの例を見てください。実際、彼らの最初の例は、これと非常によく似ています。

于 2012-08-08T01:08:24.003 に答える