2013-04-08 69 views
0

我有一些問題。 多行一次,我想匹配 不是一次多行而不是一行搜索?當我是模式搜索,我想搜索multiful線

這些結果,當我運行的代碼。 在^和$之間,如果你可以使用其他變量。

pattern = r'.INFO..+Content' 
m = re.compile(pattern,re.S|re.X) 

f = open(LOG_FILE) 

data = f.read() 
print m.search(data).group() 
f.close() 

現在輸出 [INFO] 0408 | 09:50:16.57 | /lib/smtp/smtp.c:670 | [1120794944] [< < < RECEIVED < < <]
(16465.2500)SMTP COMMAND:MAIL FROM:>^M

[INFO] 0408| 09:50:16.57| /lib/smtp/smtp.c:670| [1120794944] [>>> SEND >>>] 
(16465.2500)  SMTP COMMAND : 250 2.1.5 Ok^M 

[INFO] 0408| 09:50:16.58| /lib/smtp/smtp.c:670| [1120794944] [<<< RECEIVED <<<] 
(16465.2500)  SMTP COMMAND : RCPT TO: >^M 

[INFO] 0408| 09:50:16.58| /lib/smtp/smtp.c:670| [1120794944] [>>> SEND >>>] 
(16465.2500)  SMTP COMMAND : 250 2.1.0 Ok^M 

Date: Mon, 08 Apr 2013 09:50:19 +0900^M 
Sender: +821057033705/TYPE=PLMN^M 
From: +821057033705/TYPE=PLMN^M 
To: +821046903908/TYPE=PLMN^M 
X-Mms-Message-ID: 1Tf48000001^M 
X-Mms-Transaction-ID: 1Tf48000001^M 
Content-Type: text/plain;charset="UTF-8"^M 
Content 
+0

請顯示一些示例輸入和輸出。 – 2013-04-08 08:29:01

+1

除非您的目標是在正則表達式的開頭匹配字母'I','N','F'或'O',您還需要轉義括號('\ [INFO \]')。 – 2013-04-09 05:54:31

+0

我終於看到寫作 – 2013-04-10 08:47:04

回答

1

該文檔(http://docs.python.org/2/library/re.html)狀態; re.Mre.MULTILINE

當正則表達式多行時,可能不需要循環遍歷文件行:)

+0

lig文件非常大。也許5G。所以我需要循環。 :) – 2013-04-08 08:04:00

+0

我看到:)。 're.M'應該做釷^^的訣竅,但是該文件可能已經在'\ n'-linebreaks分裂了嗎?你可能想要做一些像'^'-' $'來匹配字符串的開頭直到結束。當然,這可能與你的文件有一些獨特之處:) – 2013-04-08 08:05:26

+0

're.MULTILINE'有點混淆名字,因爲它與一次匹配多行無關。它只會告訴如何解釋特殊字符'^'和'$'。 – georg 2013-04-08 08:38:45