2011-11-16 58 views
7

我想用正則表達式從SQL導出文件轉儲數據。要匹配帖子內容的字段,我使用'(?P<content>.*?)'。它在大多數情況下都能正常工作,但如果該字段包含'\ n'字符串,則正則表達式不匹配。我如何修改正則表達式來匹配它們?謝謝!正則表達式:如何匹配包含「 n」(換行符)的字符串?

實施例(我使用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'。在這兩種情況下,字符串實際上只包含一個字符。你可以通過檢查len(「\ x07」)和len(「\ a」)來確認。也可以嘗試在''\ a「':'」\ a「.find(」a「)或'」0「中比較'」\ a「==」\ x07「'或搜索'」a「 'in'「\ x07」':'「\ x07」.find(「0」)'。結果應該非常豐富。 –

+0

嗨,亞當!它仍然存在問題,如果原始字符串包含\'結果將被轉換爲',這將打破SQL命令。所以重要的是讓字符串「原樣」 –

3

您需要Dotall修飾符才能使點也匹配換行符。

re.S
re.DOTALL
充分利用 ''特殊字符匹配 中的任何字符,包括換行符;沒有這個標誌,'。'將匹配除換行符以外的任何內容 。

看到它here on docs.python.org

相關問題