具有多种可能替换的正则表达式

时间:2012-10-22 16:04:41

标签: .net regex translation replace

我有一些现有的文字,我需要用替换文本替换。要使用的替换文本取决于现有文本。这是一个简单的翻译表,显示了我的问题:


    ,'A',  ==> ,'Fred',
    ,'B',  ==> ,'Mary',
    ... and so on...

匹配原始文本很容易。我遇到问题的部分是替换文本。如您所见,替换文字取决于匹配的文字:如果找到,'A',,我需要将其替换为,'Fred',。基本上,我似乎需要一个转换表机制。

我正在使用.NET RegEx类。

我理解在替换文本中捕获匹配并重新使用它们,但我认为不会这样做。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

由于您使用的是.NET,因此有两种方法:

  1. 多次替换:

    string.Replace("A", "Fred");
    string.Replace("B", "Mary");
    // ... (could use regex based replacement if necessary)
    
  2. MatchEvaluator代表传递给Regex.Replace代替替换字符串:

    Regex.Replace(input, matchRegexString, match => {
      // Code that takes a System.Text.RegularExpressions.Match and returns a string
    });
    

    并且委托的返回用作替换文本。 (还有一个非静态版本,您可以在其中创建Regex实例。)过去,我已经完成此操作,以便在字典中循环的输入中基于%key%执行替换。 / p>

答案 1 :(得分:0)

我认为,没有多次替换和没有委托/子程序的唯一方法是,只有在主题字符串中替换字符串已经存在“稍后”时才会起作用。

替换它:

,'A',(?=.*(Fred))|,'B',(?=.*(Mary))

有了这个:

,'$1$2',

是的,这是一个相当愚蠢的伎俩。投票@Richard为愚蠢道歉。