Python中如何将指定格式字符串转为含列表值的目标dict()?
嘿,这个问题我之前也踩过坑!直接用split(": ")确实会把内容拆得乱七八糟,因为后面的Time和Subject text前面的空格+冒号才是真正的键值分隔符,而不是所有的: 。给你几个实用的解决方案:
方法1:正则表达式匹配(最精准,适合固定键场景)
因为你的键是明确的三个:Date、Time、Subject text,可以用正则精准捕获每个键对应的值,避免误拆分:
import re text = "Date: 07/14/1995 Time: 11:31:50 Subject text: Something-cool" # 正则匹配:捕获键,然后匹配值直到下一个键开头或字符串结尾 pattern = r'(Date|Time|Subject text): ([^:]+?(?= (Date|Time|Subject text):|$))' matches = re.findall(pattern, text) # 整理成目标字典格式 result = {key: [value.strip()] for key, value, _ in matches} print(result)
输出结果就是你想要的:
{"Date":["07/14/1995"], "Time": ["11:31:50"], "Subject text":["Something-cool"]}
方法2:手动分割(简单直接,适合键顺序固定的场景)
如果键的顺序永远是Date → Time → Subject text,可以直接按特定的分隔符分步拆分,不用正则也能搞定:
text = "Date: 07/14/1995 Time: 11:31:50 Subject text: Something-cool" # 第一步:拆分Date部分和剩余内容 date_section, rest = text.split(" Time: ", 1) # 第二步:拆分Time部分和Subject text部分 time_section, subject_section = rest.split(" Subject text: ", 1) # 组装字典 result = { "Date": [date_section.split(": ")[1]], "Time": [time_section], "Subject text": [subject_section] } print(result)
方法3:通用正则方案(适合键可能扩展的场景)
如果以后可能增加类似格式的键(比如Location: New York),可以用更通用的正则匹配任意带空格的键名:
import re text = "Date: 07/14/1995 Time: 11:31:50 Subject text: Something-cool" # 匹配由空格分隔的单词组成的键,然后捕获对应的值 pattern = r'(\b\w+(?: \w+)*): ([^:]+?(?= \b\w+(?: \w+)*:|$))' matches = re.findall(pattern, text) result = {key: [value.strip()] for key, value in matches} print(result)
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

