如何将确切的单词替换为列表中的另一个单词
本文关键字:单词 列表 另一个 替换 | 更新日期: 2023-09-27 18:32:21
我有一个列表,如下所示:
- 乔治·
- 米歇尔 ·
- 亚西尔·
我想用"fguhCool"替换 fg、fgu 和 fguh,我已经尝试过这样的事情:
foreach (var ignore in NameToPoulate)
{
tempo = ignore.Replace("fg", "fguhCool");
NameToPoulate_t.Add(tempo);
}
但是"fgu"变成了"fguhCoolu","fguh"变成了"fguhCooluh",有没有更好的主意?
感谢您的帮助。
我假设这是一个家庭作业,并且您正在测试特定的算法,而不是任何完成这项工作的代码。
这可能是你的老师的想法:
学生将意识到代码应该首先检查"fguh",然后检查"fgu",然后检查"fg"。顺序很重要,因为正如您所注意到的,替换"fg"会破坏"fguh"。
一些学生将把这实现为一个循环,其中包含 if-else 条件。这样您就不会替换已经替换的"fguhCool"中的"fg"。
但是你会发现,如果"fg"和"fgu"都在同一个字符串中,算法就会崩溃。然后,您不能允许"fgu"的存在阻止您在字符串的不同部分检查"fg"。
你的老师正在寻找的答案可能是你应该首先找到"fguh","fgu"和"fg"(按这个顺序),并用不包含"fg"的中间字符串替换它们。然后,在完成此操作后,您可以搜索该中间字符串并将其替换为"fguhCool"。
您可以使用正则表达式:
Regex.Replace(@"'bfg'b", "fguhCool");
'b
匹配所谓的单词边界,这意味着它匹配单词的开头或结尾(大致如此,但为此目的足够)。
使用正则表达式:
Regex.Replace("fg(uh?)?", "fguhCool");
另一种方法是先将长词替换为短词,然后将短词替换为结束值(我假设所有单词 - "fg","fgu"和"fguh" - 将映射到相同的值"fguhCool",对吧?
tempo = ignore
.Replace("fguh", "fg")
.Replace("fgu", "fg")
.Replace("fg", "fguhCool");
Obs.:这假设这些单词可以出现在字符串中的任何位置。如果您担心整个单词(即这些单词不是较大单词的子字符串的情况),请查看@Joey的答案(在这种情况下,简单的替换不起作用,正则表达式确实是最佳选择)。