输入:This AbT5xY\nAppleUvW is a test AbT5xY AppleUvW is a test and AbT5xrAppleUvW and another AbT5xY\nmangoUvW test

遵循RegEx的输出:This SomeFruitUvW is a test SomeFruitUvW is a test and AbT5xrAppleUvW and another SomeFruitUvW test.

Regex.Replace(st, "AbT5xY\\s*(Apple)|(mango)", "SomeFruit");


但是我需要的是,如果AbT5xY后跟Apple,则将AbT5xYApple替换为Fruit1;如果AbT5xY后跟mango,则将AbT5xYmango替换为Fruit2。因此,

所需的输出:This Fruit1UvW is a test Fruit1UvW is a test and AbT5xrAppleUvW and another Fruit2UvW test.

注意:


我忽略了AbT5xY和Apple或AbT5xY和芒果之间的空格字符(换行符,空格,制表符等)。另外,由于AbT5xrAppleUvW正确地不匹配,因为它在Apple之前有AbT5xr而不是AbT5xY
我认为C#的RegEx有一些需要在这里使用的替换,组,捕获内容,但是我在这里如何使用这些内容方面很挣扎。

最佳答案

您可以将Applemango捕获到组1中,并且在替换时,使用匹配评估器,您可以在其中检查组1的值,然后根据检查结果执行必要的替换:

var pat = @"AbT5xY\s*(Apple|mango)";
var s = "This AbT5xY\nAppleUvW is a test AbT5xY AppleUvW is a test and AbT5xrAppleUvW and another AbT5xY\nmangoUvW test";
var res = Regex.Replace(s, pat, m =>
        m.Groups[1].Value == "Apple" ? "Fruit1" : "Fruit2");
Console.WriteLine(res);
// => This Fruit1UvW is a test Fruit1UvW is a test and AbT5xrAppleUvW and another Fruit2UvW test


请参见C# demo

AbT5xY\s*(Apple|mango)正则表达式匹配AbT5xY,然后是0+空格(注意,当我使用逐字字符串文字时,请使用单个反斜杠),然后匹配并将Applemango捕获到组1中。 1值为m.Groups[1].Value == "Apple",然后继续替换匹配项。

07-24 15:23