我正在嘗試使用正則運算式 finditer() 將基本的 HTTP 請求資料提取到字典串列中。原始資料如下:
日志資料2 =
13.112.8.80 - rau5026 [21/Jun/2019:15:46:09 -0700] “HEAD /ubiquitous/transparent HTTP/1.1”200 16928 159.253.153.40 - - [21/Jun/2019:15:46:10 - 0700]“POST /電子商務 HTTP/1.0”504 19845 136.195.158.6 - feeney9464 [21/Jun/2019:15:46:11 -0700]“HEAD /open-source/markets HTTP/2.0”204 21149
第 2 行只有一個用戶的“-”,所以我只需要一個用戶的空字串,如下所示:
預期結果: {'host': '159.253.153.40', 'user_name': '', 'time': '21/Jun/2019:15:46:10 -0700', 'request': 'POST /e-業務 HTTP/1.0'}
第 1 行和第 3 行適用于我下面的正則運算式代碼。但是第 2 行在宿主項中有一個“2”。誰能告訴我哪里出錯了?謝謝!
實際結果: {'host': '159.253.153.40 - ', 'user_name': '', 'time': '21/Jun/2019:15:46:10 -0700', 'request': 'POST /e -業務 HTTP/1.0'}
謝謝!
result2 = \[\]
pattern2="""
(?P\<host\>.*)*
(\\s-\\s?)
(?P\<user_name\>\\w)
(\\s \[)
(?P\<time\>(.*))*
(\])
(\\s ")
(?P\<request\>.)
(")
"""
for item in re.finditer(pattern2, logdata2, re.VERBOSE):
result2.append(item.groupdict())
uj5u.com熱心網友回復:
可能的解決方案如下:
pattern2 = r"(?P<host>.*)\s-\s(?P<user_name>.*)\s\[(?P<time>.*)\]\s\"(?P<request>.*)\""
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457110.html
上一篇:如何提取關鍵字后的單詞
下一篇:設定空std::regex
