输入: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有一些需要在这里使用的替换,组,捕获内容,但是我在这里如何使用这些内容方面很挣扎。
最佳答案
您可以将Apple
和mango
捕获到组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+空格(注意,当我使用逐字字符串文字时,请使用单个反斜杠),然后匹配并将Apple
或mango
捕获到组1中。 1值为m.Groups[1].Value == "Apple"
,然后继续替换匹配项。