0

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

    ,'A', ==> ,'弗雷德',
    ,'B', ==> ,'玛丽',
    ... 等等...

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

我正在使用 .NET RegEx 类。

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

4

2 回答 2

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%字典中循环的输入执行替换。

于 2012-10-22T16:19:08.573 回答
0

我相信,在没有多次替换和没有委托/子例程的情况下执行此操作的唯一方法也只有在替换字符串已经“稍后”存在于您的主题字符串中时才有效。

替换这个:

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

有了这个:

,'$1$2',

是的,一个相当愚蠢的把戏。投票给@Richard 为自己的愚蠢行为道歉。

于 2012-10-22T17:22:35.203 回答