python - Python:以最优雅的方式拆分这个长度结构的字符串
问题描述
给定这个字符串:
fsw="M525x617M525x617S16d48492x577S10000505x544S22a00506x524S21300487x601S37601511x574S34500482x483
我想转换
fsw[8:] (thus "M525x617S16d48492x577S10000505x544S22a00506x524S21300487x601S37601511x574S34500482x483")
在包含以下内容的字典中:
{'S16d48':'492x577', 'S10000':'505x544', 'S22a00':'506x524', 'S21300':'487x601', 'S37601':'511x574', 'S34500':'482x483'}
我设法用正则表达式得到以下信息:
>>> import re
>>> re.findall("S[123][0-9a-f]{2}[0-5][0-9a-f]",fsw[8:])
['S16d48', 'S10000', 'S22a00', 'S21300', 'S37601', 'S34500']
>>> re.findall("S[123][0-9a-f]{2}[0-5][0-9a-f].......",fsw[8:])
['S16d48492x577', 'S10000505x544', 'S22a00506x524', 'S21300487x601', 'S37601511x574', 'S34500482x483']
但就字典而言......我没有进一步了解。
另一个问题:在 Python 字典中,整个键值对(比如“S16d48”:“492x577”)必须是唯一的,对吗?
提前 - 非常感谢。问候。
解决方案
看来你可以改变你的表情
(?P<key>S[123][0-9a-f]{2}[0-5][0-9a-f])
(?P<value>\d+x\d+)
然后做一个听写理解,如
import re
rx = re.compile(r'(?P<key>S[123][0-9a-f]{2}[0-5][0-9a-f])(?P<value>\d+x\d+)')
data = "M525x617M525x617S16d48492x577S10000505x544S22a00506x524S21300487x601S37601511x574S34500482x483"
result = {m["key"]: m["value"] for m in rx.finditer(data)}
这产生
{'S16d48': '492x577', 'S10000': '505x544', 'S22a00': '506x524', 'S21300': '487x601', 'S37601': '511x574', 'S34500': '482x483'}
请参阅regex101.com上 的表达式演示和ideone.com上的代码。
推荐阅读
- azure - azure logic app retry when job already running
- javascript - How to remove error from form fields after they have been filled out?
- sublimetext3 - Anaconda worker does not start in Sublime text (Conncetion to local host timing out)
- random - Bingo Caller App 如何生成数字 1-75?
- javascript - 查找单个 rgb 值是否落在数组中任何 rgb 值的阈值内 - javascript
- c++ - 使用 cuModuleLoad 从 ELF 二进制文件中获取当前模块(来自 argv[0])
- javascript - 如何检查 translate.instant 的返回值是否被翻译过一次
- robotframework - 如何在 RobotFramework 中迭代结果
- amazon-web-services - 如何为 EC2 现货实例模拟 BidEvictedEvent?
- r - 如何在R中将网络分割成相等的线段