我有一个很大的字符串,其中可能有不止一次出现的特定单词(文本后跟一个冒号,例如“ 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);