python - 拆分列表中的字符串并匹配python中最后一个拆分的字符串
问题描述
我有一个很长的清单
| 0x60000000 | _loc_NO_BOOL_CONST_GROUP
| 0x60000020 | _loc_NO_BOOL_GROUP
| 0x60000020 | _loc_NO_BOOL_TEXT_GROUP
| 0x6000ffe0 | _loc_NE_BOOL_GROUP
| 0x6000ffe0 | _loc_NE_BOOL_TEXT_GROUP
| 0x60010000 | _loc_NO_FIXED_DATA_GROUP
| 0x60013dc0 | _loc_NE_BOOL_CONST_GROUP
| 0x60013dc0 | _loc_NE_FIXED_DATA_GROUP
我需要拆分_loc_NO_
并且_loc_NE_
必须匹配拆分的 LAST STRING ,如果找到匹配,则返回相应的值。
假设在_loc_NO_BOOL_CONST_GROUP
我们拆分_loc_NO_
和最后一个字符串中我们拆分和最后一个字符串是BOOL_CONST_GROUP
相似的_loc_NE_BOOL_CONST_GROUP
_loc_NE_
BOOL_CONST_GROUP
两个字符串都匹配,所以现在我必须返回相应的值,即“0x60000000”和“0x60013dc0”
所以输出应该是这样的:
BOOL_CONST_GROUP = 第一个地址值(即 0x60000000),第二个地址值(即 0x60013dc0)。
同样 BOOL_TEXT_GROUP = 第一个地址值,第二个地址值
解决方案
在我看来,这是使用正则表达式的好地方。这是一个完整的工作解决方案,其中包含从您的示例中推断出的一些额外限制。
推断规则:
- 您正在寻找有效的十六进制值,在这种情况下应该只是小写
- 该指令是数据文件中每一行的最后一项
- 您的数据在 datafile.txt 中
import re
from collections import defaultdict
strings_to_find = ['_loc_NO_', '_loc_NE_']
pat = re.compile(
r'\| (?P<location>0x[0-9a-f]{8}) ' +
r'\| (?P<instruction>%s)' % '|'.join(strings_to_find) +
r'(?P<instruction_detail>.*?)$',
re.MULTILINE | re.DOTALL)
with open('datafile.txt', 'r', encoding='utf-8') as infile:
data = infile.read()
results = defaultdict(list)
matches = pat.finditer(data)
for m in matches:
results[m.group('instruction_detail')].append(m.group('location'))
for k, v in results.items():
print(k, v)
推荐阅读
- php - 尽管有 php curl 扩展,但 curl sept_opt 和 sept_opt_array 未定义函数
- openwrt - 如何在 OpenWRT 中创建自定义包提要?
- vb.net - Unable to cast EventArgs object to PaintEventArgs when drawing a line in VB.NET
- java - Android - Accessing provider tag in manifest and change it's attribute value
- javascript - JavaScript 代码根本不想运行
- mysql - Subquery returning wrong answer
- reactjs - useState not setting initial state?
- android - Use IntentService with AndroidViewModel
- node.js - Why does my function comprised of asynchronous functions not returning correct value? (NodeJS)
- html - Angular 和 HTML 日期选择器