簡體   English   中英

python-正則表達式解析日志

[英]python - regex parsing log

我有以下我想解析的日志行

<log pos_start="40652288" end_position="40689664" log_type="1" length="37376" block_id="4024" block_position="18"/>

我正在使用python regex,這是我到目前為止所做的

regexParse = re.match(".*pos_start=(\d+).*end_position=(\d+).*log_type=(\d+).*length=(\d+).*block_id=(\d+).*block_position=(\d+).*",StatelogLine)
start_position = regexParse.group(1)
end_position = regexParse.group(2)

我收到以下錯誤

AttributeError: 'NoneType' object has no attribute 'group'

任何人都有任何想法是什么問題

非常簡單: 由於未指定雙引號 ,因此您的正則表達式與字符串不匹配 如果添加它們, 則您的正則表達式將起作用
作為副節點,點星湯( .* )效率很低。 為什么不使用解析器呢?

考慮以下代碼與BeautifulSoup

from bs4 import BeautifulSoup
string = """<log pos_start="40652288" end_position="40689664" log_type="1" length="37376" block_id="4024" block_position="18"/>"""
xml = BeautifulSoup(string)
print xml.log["pos_start"]
# 40652288

之后,您可以像數組一樣訪問元素,而無需德魯伊正則表達式。 看看他們的主頁和文檔

您可以解析該行,例如獲得鍵和值: Regex Demo

(\\w+)="(\\d+)"

如果需要,您還可以根據它創建一個字典:

import re

s = '<log pos_start="40652288" end_position="40689664" log_type="1" length="37376" block_id="4024" block_position="18"/>'

matches = re.findall(r'(\w+)="(\d+)"', s)
#[('pos_start', '40652288'),
# ('end_position', '40689664'),
# ('log_type', '1'),
# ('length', '37376'),
# ('block_id', '4024'),
# ('block_position', '18')]

d = dict(matches)
#{'block_id': '4024',
# 'block_position': '18',
# 'end_position': '40689664',
# 'length': '37376',
# 'log_type': '1',
# 'pos_start': '40652288'}

您的正則表達式不正確。 您需要轉義雙引號以使其成功。

.*pos_start=\"(\d+)\" +end_position=\"(\d+)\" +log_type=\"(\d+)\" +length=\"(\d+)\" +block_id=\"(\d+)\" +block_position=\"(\d+)\"

你忘了雙qoutes

regexParse = re.match(".*pos_start=\"(\d+)\".*end_position=\"(\d+)\".*log_type=\"(\d+)\".*length=\"(\d+)\".*block_id=\"(\d+)\".*block_position=\"(\d+)\".*",s)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM