我知道這裏有很多關於「正則表達式python變量」的問題,但似乎沒有一個適合我。我一直在尋找兩個小時,但我沒有找到任何具體的問題的答案。正則表達式python變量
這是我的問題:我想搜索[ERROR]
和[WARNING]
的文字。正如你可能知道/var/log/mysql/error.log
有一個標準的文件,基本上這樣year-month-day hour:minute
。
例子:
2016-01-03 13:19:40 1242 [Warning] Buffered warning: Changed limits: table_open_cache: 431 (requested 2000)
2016-01-03 13:19:40 1242 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
2016-01-03 13:19:40 1242 [Note] Plugin 'FEDERATED' is disabled.
我有這個腳本在它試圖做的工作:
#!/usr/bin/python
import re
import time
import datetime
from datetime import datetime
i = datetime.now()
dia = i.day
mes_abreviado = i.strftime('%b')
hora = i.strftime('%H')
minuto = i.strftime('%M')
ano = i.strftime('%Y')
mes_ano_num = i.strftime('%m')
dia_00 = i.strftime('%d')
#Data/Hora especifica "syslog"
date = '%s %d %s:%s'% (mes_abreviado, dia, hora, minuto)
#Data/Hora especifica do ficheiro "error.log"
mysql_time = '%s-%s-%s %s:%s'% (ano, mes_ano_num, dia_00, hora, minuto)
print mysql_time
words = '\b\[ERROR\]\b|\b\[WARNING\]\b'
print words
file = open("/var/log/mysql/error.log", "rb")
for line in file:
if re.findall(r'{0}'.format(words), line):
# if re.findall(r'{0}'.format(mysql_time), line):
# print "aqui"
print line
file.close()
我要得到當前的年,月,日,小時和分鐘搜索它在re.findall
的功能。問題是:我需要將它們放在一個變量中,並在正則表達式中使用它們,但它似乎不起作用。
下面是輸出:
2016-01-03 14:21
\[ERROR\\[WARNING\]
正如你可以看到words
不打印\b
並且它搞亂了正則表達式。 我嘗試過使用words = re.compile(words)
,words = re.compile(r'\b\[ERROR\]\b|\b\[WARNING\]\b')
和re.findall(r'{0}'.format(words)
。從看起來像正則表達式是非常好的。
代碼中有很多評論是我將解決後者的問題。如果有什麼缺失讓我知道,所以我可以編輯這個答案。先謝謝你。
目前還不是很清楚您給出示例文件的實際輸出/結果。你能否詳細說明一下? – timgeb
我沒有讀你的整個代碼,而是猜測:嘗試將'words ='\ b \ [ERROR \] \ b | \ b \ [WARNING \] \ b''改爲'words = r'\ b \正如@凱文所說 - 使用一個原始字符串文字 - '\ b's目前將被轉義爲退格字符,並且不會被存在。[錯誤\] \ b | \ b \ [警告\] \ b'' – Kevin
考慮到正則表達式字邊界轉義字符 –