regex 跳过字符串中的单词沿着特殊字符

x759pob2  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(172)

我有一个字符串:

string str = "= Fields!Change_Date.Value & Fields!Change_User.Value";

我希望输出为:
更改日期&&更改用户
我可以使用多个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, @"&", "&&");

我怎样才能一次完成呢?可能吗?

e3bfsja2

e3bfsja21#

您可以捕获Change_DateChange_User的单词字符,并在您不想保留的字符之间进行匹配。
然后,在更换过程中,仅使用2个捕获组,中间为&&

^= Fields!(\w+)\.Value & Fields!(\w+)\.Value$
    • 说明**
  • ^字符串开始
  • = Fields!按字面匹配
  • (\w+)捕获组1,匹配1+单词字符
  • \.Value & Fields!匹配.Value & Fields!
  • (\w+)捕获组2,匹配1+单词字符
  • \.Value匹配.Value
  • $字符串结束

请参见regex101 demoC# demo

string str = "= Fields!Change_Date.Value & Fields!Change_User.Value";
string result = Regex.Replace(str, @"^= Fields!(\w+)\.Value & Fields!(\w+)\.Value$", "$1 && $2");
Console.WriteLine(result);

产出

Change_Date && Change_User
busg9geu

busg9geu2#

您可以尝试搜索并替换为组捕获

var pattern = new Regex(@"[^!]+!([^.]+)[^!]+!([^.]+).*");
var input = "= Fields!Change_Date.Value & Fields!Change_User.Value";
var output = pattern.Replace(input, "$1 && $2");

参见here演示

相关问题