[英]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.