如何从类字典格式文件中提取指定键值对(如foo:1234)?
提取类字典格式中的指定键值对
没问题!针对你遇到的这种混合格式(键带双引号/不带双引号)的类字典文本提取需求,我给你几个实用的方案,不管是用脚本还是命令行都能轻松搞定:
方法1:正则表达式(通用型,多场景适用)
正则是处理这类半结构化文本的利器,不管你用Python、JavaScript还是命令行工具,都能快速适配。针对提取foo对应的键值对,我们可以写一个能匹配两种键格式的正则:
(?:"foo"|foo):\d+
规则解释
(?:"foo"|foo):同时匹配带双引号的"foo"和不带引号的foo:\d+:匹配冒号后面的数字值(如果你的值可能是字符串、小数等,可以把\d+改成\S+或者更精准的匹配规则,比如"[^"]+"匹配带引号的字符串)
实际使用例子
- 命令行grep(假设文本存在
file.txt中):
grep -oP '(?:"foo"|foo):\d+' file.txt
- Python脚本:
import re # 示例文本,包含两种格式 sample_text = '''"foo":1234,"bar":123 foo:5678,bar:9012''' # 提取所有匹配的键值对 matches = re.findall(r'(?:"foo"|foo):\d+', sample_text) for item in matches: print(item) # 输出结果: # "foo":1234 # foo:5678
方法2:Python 严谨解析法(适合复杂值场景)
如果你的文本里的值不只是数字,还有字符串、嵌套结构这类复杂内容,正则就容易失效了。这时候可以用支持非标准JSON的库(比如json5)把文本解析成真正的字典,再提取键值,更稳妥。
首先安装依赖:
pip install json5
然后编写脚本:
import json5 # 处理带引号键的文本 text_with_quotes = '"foo":1234,"bar":123' # 给文本包裹大括号,变成合法的JSON5格式 parsed_dict1 = json5.loads(f'{{{text_with_quotes}}}') print(f'foo:{parsed_dict1["foo"]}') # 输出:foo:1234 # 处理不带引号键的文本 text_no_quotes = 'foo:5678,bar:9012' parsed_dict2 = json5.loads(f'{{{text_no_quotes}}}') print(f'foo:{parsed_dict2["foo"]}') # 输出:foo:5678
方法3:命令行awk工具(终端快速处理)
如果你习惯在Linux/macOS终端处理文本文件,awk工具也能高效完成提取:
awk -F ',' '{for(i=1;i<=NF;i++){if($i ~ /^("foo"|foo):/){print $i}}}' file.txt
逻辑说明
-F ',':把逗号作为字段分隔符- 遍历每个分隔后的字段,判断字段是否以
"foo":或foo:开头,符合条件就打印该字段
内容的提问来源于stack exchange,提问作者Jose Campos
相关产品推荐
相关产品推荐

