You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式提取特定字符串与整数构建字典?

用正则表达式提取结构化字符串为字典的实现思路

这是个很典型的结构化字符串提取需求,用正则表达式完全可以搞定,我来给你拆解几个实用的思路和具体实现:

思路一:分步匹配+键值映射

这种方法先匹配所有键值对,再根据键的类型分别处理值的格式,好处是灵活适配键的顺序变化,后续扩展新键也方便。

实现代码

import re

input_str = "item SHIRT 11-14 variance 11-12-13-14-15 color Red"
result = {}

# 正则匹配每个键值对,捕获键标识和对应的值
pattern = re.compile(r'(item SHIRT|variance|color)\s+(\S+)')
matches = pattern.findall(input_str)

for key_part, value in matches:
    # 映射键名并处理值格式
    if key_part == 'item SHIRT':
        result['ShirtType'] = list(map(int, value.split('-')))
    elif key_part == 'variance':
        result[key_part] = list(map(int, value.split('-')))
    elif key_part == 'color':
        result[key_part] = value

print(result)
# 输出: {'ShirtType': [11, 14], 'variance': [11, 12, 13, 14, 15], 'color': 'Red'}

正则说明

  • (item SHIRT|variance|color):捕获所有可能的键标识,用|分隔不同选项
  • \s+:匹配键和值之间的任意空白字符
  • (\S+):匹配值(假设值不含空格,用非空白字符匹配)

思路二:命名捕获组一次性匹配

如果输入字符串的格式完全固定(键的顺序、值的格式都不会变),可以用命名捕获组直接匹配所有目标字段,代码更简洁直观。

实现代码

import re

input_str = "item SHIRT 11-14 variance 11-12-13-14-15 color Red"
# 用命名捕获组精准匹配每个字段
pattern = re.compile(
    r'item SHIRT (?P<ShirtType>\d+-\d+) '
    r'variance (?P<variance>\d+(?:-\d+)+) '
    r'color (?P<color>\w+)'
)

match_result = pattern.fullmatch(input_str)
if match_result:
    result = {
        'ShirtType': list(map(int, match_result.group('ShirtType').split('-'))),
        'variance': list(map(int, match_result.group('variance').split('-'))),
        'color': match_result.group('color')
    }
    print(result)

正则说明

  • (?P<ShirtType>\d+-\d+):命名捕获组,匹配ShirtType对应的两个数字连字符格式
  • (?P<variance>\d+(?:-\d+)+):匹配variance的多数字连字符格式,(?:...)是非捕获组,只用来重复“-数字”的模式,避免额外生成无用分组
  • (?P<color>\w+):匹配color对应的单个单词值

注意事项

  1. 如果你的值可能包含空格(比如color Light Blue),需要调整正则的値匹配部分,比如用正向预查匹配到下一个键之前的内容:(.*?)(?=\s+(?:variance|color|$))
  2. 数字转整数的步骤要确保值都是纯数字,否则会报错,可以加异常处理或者在正则里更严格匹配数字(比如用\d+确保是数字)

内容的提问来源于stack exchange,提问作者topgun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:47:57