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

含重复分隔符的字符串解析:寻求更优实现方案

更优解析方案:正则表达式匹配

嘿,这个场景用正则表达式来处理绝对是更优解!完全不用写一堆绕来绕去的Substring逻辑,几行代码就能精准搞定你的需求。

你的核心需求其实是:从每个$分隔的片段里,提取冒号分隔的最后一段内容,同时把Seasonal / Holiday里的空格斜杠改成Seasonal/Holiday。正则刚好能完美适配这个匹配逻辑。

核心思路

用这个正则表达式直接匹配所有符合要求的内容:(?<=:)[^:$]+(?!.*:)
简单解释下规则:

  • (?<=:):正向预查,确保当前匹配内容的前面是冒号
  • [^:$]+:匹配任意不是冒号和$的字符,也就是每个片段的最后一段内容
  • (?!.*:):负向预查,确保当前匹配内容后面没有冒号,保证是该片段的最后一部分

代码示例(C#版本)

string input = "$Categories:BY COLOR:Spice$Categories:CATEGORIES:Botanical$Categories:CATEGORIES:Botanical:Leaves$Sources:adl-bdc2012:vol1:PUBLISHED-NON-150:KOETSIER,ALBERT$Categories:CATEGORIES:Seasonal / Holiday";
// 定义正则规则
Regex regex = new Regex(@"(?<=:)[^:$]+(?!.*:)");
// 获取所有匹配结果
MatchCollection matches = regex.Matches(input);
// 处理格式并拼接成目标字符串
string result = string.Join(", ", matches.Cast<Match>().Select(m => m.Value.Replace(" / ", "/")));

// 输出结果:Spice, Botanical, Leaves, KOETSIER, ALBERT, Seasonal/Holiday
Console.WriteLine(result);

代码示例(JavaScript版本)

const input = "$Categories:BY COLOR:Spice$Categories:CATEGORIES:Botanical$Categories:CATEGORIES:Botanical:Leaves$Sources:adl-bdc2012:vol1:PUBLISHED-NON-150:KOETSIER,ALBERT$Categories:CATEGORIES:Seasonal / Holiday";
// 全局匹配所有符合规则的内容
const matches = input.match(/(?<=:)[^:$]+(?!.*:)/g);
// 处理格式并拼接
const result = matches.map(item => item.replace(" / ", "/")).join(", ");

console.log(result); // 输出目标字符串

为什么这个方案更优?

  • 简洁高效:不用手动分割字符串、判断层级,正则一次性完成所有匹配
  • 易维护:如果后续规则有小调整(比如分隔符变化),只需修改正则表达式即可
  • 通用性强:大部分编程语言都支持正则表达式,换语言也能快速适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:16:08