繁体   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