Regex正则表达式需求:为指定字符串位置补充引号的通用匹配模式
解决方案
要覆盖你提到的两种场景,核心问题是原正则只能匹配无空格、无引号的单个单词,无法捕获冒号后的完整内容(包括带空格、开头有引号的情况)。
正确的正则表达式
使用以下正则来捕获Part_Name或Part_Description冒号后的全部内容:
(?<=Part_(Name|Description): )(.*)
这个正则通过正向断言定位到目标标签的冒号后,再用(.*)捕获后续所有字符(包括空格、开头引号),直到行尾。
调整后的C#代码
string partDes = "&LOG Part_Name: \"blind plug"; // 示例输入 string pattern = @"(?<=Part_(Name|Description): )(.*)"; Match match = Regex.Match(partDes, pattern); if (match.Success) { string content = match.Groups[1].Value.TrimEnd(); // 去除行尾多余空格 string processedContent; // 根据引号状态补全 if (content.StartsWith("\"") && content.EndsWith("\"")) { processedContent = content; // 已正确包裹引号,无需修改 } else if (content.StartsWith("\"")) { processedContent = content + "\""; // 仅开头有引号,补充结尾引号 } else { processedContent = $"\"{content}\""; // 无引号,前后添加引号 } partDes = Regex.Replace(partDes, pattern, processedContent); } // 输出结果示例 Console.WriteLine(partDes); // &LOG Part_Name: "blind plug"
场景验证
- 正常场景:输入
&LOG Part_Name: vacuum gripper→ 输出&LOG Part_Name: "vacuum gripper" - 问题场景:输入
&LOG Part_Name: "blind plug→ 输出&LOG Part_Name: "blind plug" - 已正确包裹:输入
&LOG Part_Description: "test component"→ 输出保持不变
原正则的问题
原正则(?<=Part_(Description|Name): )[^\""\s]+使用[^\""\s]+匹配字符,意味着只能匹配不包含引号和空格的连续片段,遇到空格或引号就会停止匹配,导致无法捕获完整内容(比如vacuum gripper只能匹配vacuum,"blind plug只能匹配blind),自然处理不了问题场景。
内容的提问来源于stack exchange,提问作者user sy
相关产品推荐
相关产品推荐

