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

如何从格式多样的Python字符串中提取并创建对应变量

问题描述

我有一段包含变量名及其对应值的字符串数据,示例如下:

string = 'var_name; var_value var_name1; var_value1 var_name2 var_value2 var_name3: var_value3'

其中变量名与值之间的分隔符可能是;、:或无分隔符。我需要根据这段字符串创建对应名称和值的变量,变量名和值可包含数字与字母。我曾尝试使用re库实现,但未能理解其用法。

解决方案

核心思路

用正则表达式匹配所有「变量名 + 可选分隔符 + 变量值」的组合,分隔符允许是;、:或者直接空格分隔,然后将匹配到的键值对转为变量(优先用字典存储,避免命名冲突)。

代码实现

import re

string = 'var_name; var_value var_name1; var_value1 var_name2 var_value2 var_name3: var_value3'

# 正则匹配规则:捕获变量名、可选分隔符、变量值
pattern = r'(\w+)\s*(?:[:;]\s*)?(\w+)'
matches = re.findall(pattern, string)

# 推荐:用字典存储键值对,安全且易管理
var_dict = {name: value for name, value in matches}

# 可选:直接创建全局变量(不推荐,易引发命名冲突)
for name, value in matches:
    globals()[name] = value

# 测试验证
print(var_dict)
# 输出: {'var_name': 'var_value', 'var_name1': 'var_value1', 'var_name2': 'var_value2', 'var_name3': 'var_value3'}

# 若创建了全局变量,可直接调用
print(var_name)  # 输出: var_value

正则规则解析

  • (\w+): 捕获变量名,\w匹配字母、数字、下划线,+表示至少1个字符
  • \s*: 匹配任意数量的空格(包括0个),处理分隔符前后的空格
  • (?:[:;]\s*)?: 非捕获组,匹配;或:,后面跟任意空格,?表示该分隔符部分可选(对应无分隔符的情况)
  • 第二个(\w+): 捕获变量值,规则同变量名

注意事项

  • 优先使用字典存储,避免全局命名空间污染,尤其是当字符串中变量名不确定时
  • 如果变量名/值包含\w以外的字符(比如连字符),可修改正则中的\w为[a-zA-Z0-9_-]等自定义字符范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 23:55:12