我有以下要解析的日志行
<log pos_start="40652288" end_position="40689664" log_type="1" length="37376" block_id="4024" block_position="18"/>
我正在使用python正则表达式,这是我到目前为止所做的
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'
任何人都有任何想法是什么问题
答案 0 :(得分:3)
非常简单:由于未指定双引号,您的regex does not match your string 就是这样。如果您添加your regex works
作为副节点,点星汤(.*
)的效率非常低。为什么不使用解析器呢?
使用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
之后你可以像数组一样访问你的元素,不需要德鲁伊正则表达式。看看their homepage and documentation。
答案 1 :(得分:2)
您可以解析该行,例如您同时获得键和值: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'}
答案 2 :(得分:1)
你的正则表达式是不正确的。您需要转义双引号才能使其成功匹配。
.*pos_start=\"(\d+)\" +end_position=\"(\d+)\" +log_type=\"(\d+)\" +length=\"(\d+)\" +block_id=\"(\d+)\" +block_position=\"(\d+)\"
答案 3 :(得分:0)
你忘了双qoutes
regexParse = re.match(".*pos_start=\"(\d+)\".*end_position=\"(\d+)\".*log_type=\"(\d+)\".*length=\"(\d+)\".*block_id=\"(\d+)\".*block_position=\"(\d+)\".*",s)