我有一个很大的字符串,其中可能有不止一次出现的特定单词(文本后跟一个冒号,例如“ test:”)。例如,像这样:

word:
TEST:
word:

TEST:
TEST: // random text


“单词”出现两次,“测试”出现三次,但是数量可以变化。同样,这些单词不必具有相同的顺序,并且可以与该单词在同一行中包含更多文本(如最后一个“ TEST”示例所示)。我需要做的是将出现编号附加到每个单词,例如输出字符串需要这样:

word_ONE:
TEST_ONE:
word_TWO:

TEST_TWO:
TEST_THREE: // random text


获得我写的这些单词的RegEx是^\b[A-Za-z0-9_]{4,}\b:。但是,我不知道如何快速完成上述任务。有任何想法吗?

最佳答案

正则表达式非常适合此工作-将“替换”与匹配评估器一起使用:

此示例未经测试或编译:

public class Fix
{
    public static String Execute(string largeText)
    {
        return Regex.Replace(largeText, "^(\w{4,}):", new Fix().Evaluator);
    }

    private Dictionary<String, int> counters = new Dictionary<String, int>();
    private static String[] numbers = {"ONE", "TWO", "THREE",...};
    public String Evaluator(Match m)
    {
        String word = m.Groups[1].Value;
        int count;
        if (!counters.TryGetValue(word, out count))
          count = 0;
        count++;
        counters[word] = count;

        return word + "_" + numbers[count-1] + ":";
    }
}


这应该返回您在调用时所请求的内容:

result = Fix.Execute(largeText);

09-30 17:41
查看更多