如何在列表中替换另一个确切的单词?

时间:2012-04-27 06:42:19

标签: c# list

我有一个列表:

  • george fg
  • michel fgu
  • yasser fguh

我想用“fguhCool”替换fg,fgu和fguh我已经尝试过这样的事情:

            foreach (var ignore in NameToPoulate)
        {
            tempo = ignore.Replace("fg", "fguhCool");
            NameToPoulate_t.Add(tempo);
        }

但随后“fgu”成为“fguhCoolu”而“fguh”成为“fguhCooluh”是否有更好的主意?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我认为这是一项家庭作业,并且您正在接受特定算法的测试,而不是任何执行该作业的代码。

这可能是你老师的想法:

学生会意识到代码应首先检查“fguh”,然后检查“fgu”然后检查“fg”。顺序很重要,因为正如您所注意到的那样,替换“fg”会破坏“fguh”。

这将由一些学生实施为一个循环,其中包含if-else条件。这样你就不会替换已经替换过的“fguhCool”中的“fg”。

但是如果“fg”和“fgu”都在同一个字符串中,你会发现算法会崩溃。你不能允许“fgu”的存在阻止你在字符串的不同部分检查“fg”。

您的老师正在寻找的答案可能是您应首先找到“fguh”,“fgu”和“fg”(按此顺序),并将其替换为不包含“fg”的中间字符串。完成后,您可以搜索该中间字符串并将其替换为“fguhCool”。

答案 1 :(得分:0)

您可以使用正则表达式:

Regex.Replace(@"\bfg\b", "fguhCool");

\b匹配所谓的字边界,这意味着它匹配单词的beginnnig或结尾(粗略地说,但为了这个目的)。

答案 2 :(得分:0)

使用正则表达式:

Regex.Replace("fg(uh?)?", "fguhCool");

另一种方法是首先替换短的长单词,然后替换结束值的短语(我假设所有单词 - “fg”,“fgu”和“fguh” - 将映射到相同的值“fguhCool”,对吗?)

tempo = ignore
    .Replace("fguh", "fg")
    .Replace("fgu", "fg")
    .Replace("fg", "fguhCool");

Obs。:假设这些单词可以出现在字符串中的任何位置。如果你担心整个单词(即那些单词不是更大单词的子串)的情况,那么请参阅@Joey的答案(在这种情况下,简单的替换不会做,正则表达式真的是最好的选择)。