2011-11-16 10 views
7

正規表現を使用してSQLエクスポートファイルからデータをダンプしようとしています。投稿コンテンツのフィールドに一致するように、私は '(?P<content>.*?)'を使用します。ほとんどの場合、うまく動作しますが、フィールドに '\ n'の文字列が含まれている場合、正規表現は一致しません。どのようにして正規表現を修正して一致させることができますか?ありがとう!正規表現: " n"(改行)を含む文字列をどのように一致させるか?

例(Iは、Pythonを使用しています):

>>> re.findall("'(?P<content>.*?)'","'<p>something, something else</p>'") 
['<p>something, something else</p>'] 

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'") 
[] 

P.S.前部に「\」が付いているすべての文字列は、エスケープ文字として扱われているようです。どのようにregxに彼らをそのまま扱うように指示できますか?

答えて

21

あなたはDOTALLオプションを使用する必要があります

>>> re.findall("'(?P<content>.*?)'","'<p>something, \n something else</p>'", re.DOTALL) 
['<p>something, \n something else</p>'] 

thisを参照してください。

+0

感謝を参照してください!また、たとえば、文字列に '\ a'と答えると '\ x07'に変換されます。彼らをそのまま維持する方法はありますか?それともデータベースに入れても問題ないのですか? –

+1

'\ x07'はPythonがコード7で文字を表現するための単なる方法です。それを表現する別の方法は' \ a'です。どちらの場合も、文字列には実際には1文字しか含まれません。これは 'len(" \ x07 ")'と 'len(" \ a ")'をチェックすることで確認できます。また、\ a "==" \ x07 "'を検索するか、\ "a \" "。\" a \ fP( "a")\ "または\" 0 \ '' \ x07 "': '" \ x07 ".find(" 0 ")'で始まります。結果は非常に参考になるはずです。 –

+0

こんにちはアダム!元の文字列に\ '結果が変換されます。'が含まれていれば、sqlコマンドを壊してしまいます。したがって、文字列をそのまま "そのまま"使用することが重要です –

3

ドットを改行文字に一致させるには、Dotall修飾子が必要です。

re.S
re.DOTALL
ください 'を。'特殊文字は、改行を含めて allにある任意の文字に一致します。このフラグがなければ、 '。'改行以外は と一致します。

それをhere on docs.python.org

関連する問題