2012-04-27 30 views
0

我有这样一个清单:如何用列表中的另一个替换确切的单词?

  • 乔治·FG
  • 米歇尔FGU
  • 阿拉法特fguh

我想通过 “fguhCool” 取代FG,FGU,和fguh我已经尝试过这样的事情:

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

但是,然后“fgu”成为“fguhCoolu”和“fguh”是来“fguhCooluh”是否有更好的主意?

感谢您的帮助。

+0

选择替换零件的实际规则是什么?是否' fg <其他字符,直到空格>?或者它是' fg <直到行末>'或者只是'fg <之后的任何事情>'?你能看到这些有多不同吗? – yamen 2012-04-27 06:45:56

+0

如果这是家庭作业/功课,你应该这样标记它。 – Tormod 2012-04-27 06:51:24

回答

0

你可以使用正则表达式:

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

\b所谓字边界这意味着一个单词的beginnnig或结束匹配(大概,但为了这个目的就够了)相匹配。

0

使用正则表达式:

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

的替代将首先取代长字的短的,然后更换短的终值(我假设所有的词 - “FG” “甘草黄酮”和“fguh” - 将映射到相同的值“fguhCool”,右)

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

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

3

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

这可能是你的老师有几点:

学生将意识到,该代码应检查“fguh”,然后再“甘草黄酮”,然后“FG”。顺序非常重要,因为如你所注意到的那样,替换“fg”将会破坏“fguh”。

这将由一些学生实现为if-else条件的循环。这样你就不会替换已经被替换的“fguhCool”中的“fg”。

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

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

相关问题