以下解決方案使用正則表達式(編譯,以加快搜索上)相匹配的相關線路,並提取所需的信息。該表達式使用命名組「id」和「hexValue」來標識要從匹配行中提取的數據。
import re
expression = "(?P<id>\w+?)_INIT\s*?=.*?'h(?P<hexValue>[0-9a-fA-F]*)"
regex = re.compile(expression)
def getIdAndValueFromInitLine(line):
mm = regex.search(line)
if mm == None:
return None # Not the ..._INIT parameter or line was empty or other mismatch happened
else:
return (mm.groupdict()["id"], "0x" + mm.groupdict()["hexValue"])
編輯:如果我理解正確的下一個任務,你需要找到那些INIT的hexvalues和ADDR行其ID匹配,使INIT hexvalue的字典到ADDR hexvalue。
regex = "(?P<init_id>\w+?)_INIT\s*?=.*?'h(?P<initValue>[0-9a-fA-F]*)"
init_dict = {}
for x in re.findall(regex, lines):
init_dict[x.groupdict()["init_id"]] = "0x" + x.groupdict()["initValue"]
regex = "(?P<addr_id>\w+?)_ADDR\s*?=.*?'h(?P<addrValue>[0-9a-fA-F]*)"
addr_dict = {}
for y in re.findall(regex, lines):
addr_dict[y.groupdict()["addr_id"]] = "0x" + y.groupdict()["addrValue"]
init_to_addr_hexvalue_dict = {init_dict[x] : addr_dict[x] for x in init_dict.keys() if x in addr_dict}
即使這不是你真正需要的,使用init和addr字典可能有助於更容易地實現目標。如果有多個_INIT(或_ADDR)行具有相同的ID和不同的hexvalues,那麼上述字典方法將無法以直接的方式工作。
您是否嘗試過使用正則表達式或手動刪除「asfd」.replace()和朋友的部件? – 2013-04-30 21:29:21