繁体   English   中英

C#正则表达式-匹配特定的字符串,后跟一个substring1或substring2

[英]C# Regex - Match specific string followed by a substring1 or substring2

输入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然后更换AbT5xYAppleFruit1 ; 如果AbT5xY之后是mango AbT5xYmangoFruit2替换Fruit2 因此,

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

注意事项

  1. 我忽略了AbT5xY和Apple或AbT5xY和芒果之间的空白字符(换行符,空格,制表符等)。 此外AbT5xrAppleUvW正确不匹配,因为它有AbT5xr而不是AbT5xY苹果之前。
  2. 我认为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#演示

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM