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

含空格值的键值对(KVP)提取正则表达式求解

提取含空格值的键值对正则方案

核心正则表达式

使用带负向预查的正则可精准匹配这类键值对:

\b([^=\s]+)=((?:(?!\b[^=\s]+=).)*)

正则解析

  • \b:单词边界,确保键是独立完整单元,避免部分匹配(比如不会把abc=1 def=2里的bc=1 de误判为键值对)
  • ([^=\s]+):捕获键,匹配不含等号和空格的字符(键本身不能有空格或等号是这类场景的默认规则)
  • =:匹配键值分隔符
  • ((?:(?!\b[^=\s]+=).)*):捕获值,通过负向预查实现“直到下一个键出现前的所有内容”:
    • (?!\b[^=\s]+=):断言当前位置之后不是新的键值对开头
    • .*:匹配任意字符(包括空格、换行、制表符),直到触发上述断言

之前尝试的正则失效原因

  • .+?=.+?:非贪婪匹配会在遇到第一个空格时停止取值,无法处理值含空格的情况
  • \s?([^\s]+):直接排除空格,完全无法匹配带空格的值

代码示例

JavaScript

const inputStr = "a=1 b=cat c=1 and 2 d=3";
const kvRegex = /\b([^=\s]+)=((?:(?!\b[^=\s]+=).)*)/g;
const result = [];
let match;

while ((match = kvRegex.exec(inputStr)) !== null) {
  // 清理值的首尾空白,符合后续清理要求
  const cleanedValue = match[2].trim();
  result.push(`${match[1]}=${cleanedValue}`);
}

console.log(result);
// 输出: ["a=1", "b=cat", "c=1 and 2", "d=3"]

Python

import re

input_str = "a=1 b=cat c=1 and 2 d=3"
kv_regex = re.compile(r'\b([^=\s]+)=((?:(?!\b[^=\s]+=).)*)')
result = []

for match in kv_regex.finditer(input_str):
    cleaned_value = match.group(2).strip()
    result.append(f"{match.group(1)}={cleaned_value}")

print(result)
# 输出: ['a=1', 'b=cat', 'c=1 and 2', 'd=3']

补充说明

如果输入字符串首尾有空白,或键值对之间有多个空白(换行、制表符),可在正则前后加\s*兼容:

\s*([^=\s]+)=((?:(?!\s*[^=\s]+=).)*)\s*

不过用trim()/strip()清理首尾空白的方式更灵活,也符合你提出的“可接受后续清理”要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:45:38