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

如何用通用正则表达式解析含空格值的Key=Value命令字符串

通用正则表达式解析含空格值的任意Key=Value键值对

核心正则表达式

要匹配任意键值对,同时兼容值里包含空格的情况,可以用这个正则:

(\S+)=((?:(?!\S+=).)*)

正则逻辑拆解

  • (\S+):捕获键名,\S匹配所有非空白字符,确保键名里不会有空格或等号,符合常规命令行参数的键规则
  • =:匹配键和值之间的分隔符
  • ((?:(?!\S+=).)*):捕获值,用负前瞻(?!\S+=)确保当前位置后面不是新键的开头(即非空白字符+等号),这样就能把从等号开始,直到下一个键出现前的所有内容(包括空格)都作为当前键的值

代码实现(以Python为例)

直接用这个正则解析成字典:

import re

def parse_key_value(cmd_str):
    # 编译正则提升效率
    pattern = re.compile(r'(\S+)=((?:(?!\S+=).)*)')
    # 匹配所有键值对
    matches = pattern.findall(cmd_str)
    # 去除值两端的空白,返回字典
    return {key: value.strip() for key, value in matches}

# 测试几种典型场景
test_inputs = [
    "name=Bob job=Software Engineer location=San Francisco",
    "action=deploy env=prod config=/etc/app/config.yaml",
    "message=Hello there! status=success log=User logged in",
    "opt1=  value with leading spaces opt2=another value with trailing   "
]

for input_str in test_inputs:
    print(f"原始输入: {input_str}")
    print(f"解析结果: {parse_key_value(input_str)}\n")

扩展场景处理

如果你的场景里值会用单/双引号包裹(比如title="My Document"),可以用这个增强版正则,支持解析带引号的值,还能处理引号内的转义字符:

(\S+)=("(?:\\.|[^"])*"|'(?:\\.|[^'])*'|(?:(?!\S+=).)*)

对应的解析代码可以稍微调整,把引号去掉:

def parse_quoted_key_value(cmd_str):
    pattern = re.compile(r'(\S+)=("(?:\\.|[^"])*"|'(?:\\.|[^'])*'|(?:(?!\S+=).)*)')
    matches = pattern.findall(cmd_str)
    result = {}
    for key, value in matches:
        # 去掉首尾的引号(如果有)
        if (value.startswith('"') and value.endswith('"')) or (value.startswith("'") and value.endswith("'")):
            value = value[1:-1].replace('\\"', '"').replace("\\'", "'")
        result[key] = value.strip()
    return result

注意点

  • 这个方案默认键名是不含空白和等号的,如果你的场景需要支持带特殊字符的键(比如my-key=value),可以把正则里的\S+改成[\w\-]+来允许下划线和连字符
  • 如果值里本身包含键=这样的子串(比如note=key=value is a test),正则会把整个key=value is a test作为note的值,这是合理的——没有引号包裹的情况下,无法区分值内的等号和键值对的分隔等号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:32:11