有沒有辦法引用同名的2個不同的正則表達式變量?抓取0或1匹配的正則表達式變量
例如:
log1: 12-3-04: type=type1 event=GET user=thomas access_level=4 ip=1.1.1.1 port=443 dstip=2.2.2.2 dstport=432
log2: 12-3-04: type=type1 event=GET user=brad userdb=Admin ip=1.1.1.1 access_level=2
這兩個事件是相同的type
但是它們的格式是一個有點不同
正則表達式:
的事件常見的正則表達式
\d+\-\d+\-\d+\:\s+type=(?P<type>\S+)\s+event\=(?P<event>\S+)\s+user\=(?P<user>\S+)\s+
LOG1正則表達式:
access_level\=(?P<access_level>\d+)\s+ip\=(?P<\S+>)\s+port\=(?P<\d+>)\s+dstip\=(?P<dstip>\S+)\s+dstport\=(?P<\d+>)
的log 2的正則表達式:
userdb\=(?P<userdb>\S+)\s+ip\=(?P<ip>\S+)\s+access_level\=(?P<access_level>\d+)
因爲這些事件類型是相同的,我希望有一個正則表達式1捕捉到這兩個事件。 我腦子裏想的是什麼
(common regex) + (log1 regex)? + (log2 regex)?
這同時捕捉事件,但是這是常見的,必須有不同的名稱變量名。例如access_level
。我希望能夠參考access_level
並讓邏輯自動知道我想要哪個access_level
。
\d+\-\d+\-\d+\:\s+type=(?P<type>\S+)\s+event\=(?P<event>\S+)\s+user\=(?P<user>\S+)\s+(access_level\=(?P<access_level>\d+)\s+ip\=(?P<\S+>)\s+port\=(?P<\d+>)\s+dstip\=(?P<dstip>\S+)\s+dstport\=(?P<\d+>))?(userdb\=(?P<userdb>\S+)\s+ip\=(?P<ip>\S+)\s+access_level\=(?P<access_level>\d+))?
正則表達式真的需要這個嗎? 'line.split()[2:])中的dict(x.split('=')代表''給你更容易的工作方式。 – roippi
@roippi我正在寫一個插件,所以我掃描日誌文件真正很長的正則表達式行哈哈糟透了,但我必須這樣做 – Liondancer