如何用单次Regex.Replace完成特定字符串的多规则格式转换?
单次Regex.Replace实现字符串格式转换
问题背景
原始字符串:
string str = "= Fields!Change_Date.Value & Fields!Change_User.Value";
期望输出:
Change_Date && Change_User
目前已通过三次Regex.Replace调用完成转换,想确认是否可以只用单次调用实现需求。现有代码如下:
string str = "= Fields!Change_Date.Value & Fields!Change_User.Value"; string x = Regex.Replace(str, @"=? Fields!", " "); string y = Regex.Replace(x, @".Value", ""); string z = Regex.Replace(y, @"&", "&&");
可行方案
完全可以通过单次Regex.Replace实现,分两种场景处理:
场景1:固定两个字段的情况
直接用捕获组匹配字段名,同时替换&符号:
string str = "= Fields!Change_Date.Value & Fields!Change_User.Value"; string result = Regex.Replace(str, @"=? Fields!(\w+)\.Value\s*&\s*Fields!(\w+)\.Value", "$1 && $2");
正则拆解
=? Fields!:匹配开头可选的=和固定的Fields!前缀(\w+):捕获字段名(如Change_Date),替换时用$1、$2引用捕获内容\.Value:精准匹配字段后的.Value后缀\s*&\s*:匹配&以及前后可能的空白字符,替换为&&
场景2:字段数量不固定(支持多个&连接)
如果后续可能出现多个字段用&连接的情况,可结合MatchEvaluator做动态替换:
string str = "= Fields!Change_Date.Value & Fields!Change_User.Value & Fields!Change_Type.Value"; string result = Regex.Replace(str, @"=? Fields!(\w+)\.Value|\s*&\s*", match => match.Groups[1].Success ? match.Groups[1].Value : " && ");
逻辑说明
- 正则会匹配两种内容:要么是完整的字段表达式(
= Fields!XXX.Value或Fields!XXX.Value),要么是&及前后空白 - 匹配到字段时,返回捕获的字段名;匹配到
&时,返回&&
内容的提问来源于stack exchange,提问作者Abhishek_Singh_Rana
相关产品推荐
相关产品推荐

