У меня есть текстовый файл (фактически,.xml), который содержит определенные строки формы MACAddress=SOMEVALUE, и смешивается в других строках. Например, типичная такая строка (в одной строке):
<Adapter slot="3" enabled="false" MACAddress="080027671C79" cable="true" speed="0"
type="Am79C973">
N.B. В приведенной выше строке SOMEVALUE точно "080027671C79".
Итак, я хотел бы проанализировать файл и собрать все SOMEVALUES. Как я могу это сделать в python (re?, Find?)?
Спасибо заранее.
Это XML, поэтому используйте синтаксический анализатор XML. Например:
from xml.dom.minidom import parse
macs = [adapter.getAttribute("MACAddress") for adapter in
parse("file.xml").getElementsByTagName("Adapter")]
Регулярное выражение будет более быстрым.
Один из Арциомов слишком строгий, я думаю. Я бы сделал:
from re import findall
findall('MACAddress=([^ \t]+)', text)
Но я думаю, вы хотите, что есть МЕЖДУ кавычками ". Затем:
from re import findall
findall('MACAddress="([^"]+)"', text)
.
Возможно ли, что SOMEVALUE, который вы хотите уловить, содержит кавычки "?
Не уверен, что я правильно знаю, что такое MAC-адрес, но, пожалуйста, отметьте еще два варианта ниже:
Input:
text = """
Adapter slot="3" enabled="false" Mcable="true" speed="0" type="Am79C973">
Adapter slot="3" enabled="false" MACAddress="080027671C79" cable="true" speed="0" type="Am79C973">
Adapter slot="3" enabled="false" MACAddress="080027671C71" cable="true" speed="2" type="Am79C973">
Adapter slot="3" enabled="false" MACAddress="080024671C79" cable="true" speed="1" type="Am79C973">
Adapter slot="3" enabled="false" MACAddress="080227671C79" cable="true" speed="1" type="Am79C973">
"""
1) RegEx:
from re import findall
findall(r'(?i)(?<=MACAddress=\")\w{12}', text)
2) Нарезка строк:
searchTxt = 'MACAddress="'
searchLen = len(searchTxt)
getMAC = lambda line: line[line.index(searchTxt) + searchLen: line.index(searchTxt) + searchLen + 12]
map(lambda line: getMAC(line), (line for line in text.split() if searchTxt in line))