如何替换句子中的文本但避免使用某些单词/字母?

时间:2014-10-18 16:33:22

标签: c# regex string loops replace

所以我有一个人的全名:

string fullName = "Bill Richardson";

假设我有这句话:

string sentence = "Richardson had a bike and he loved it";

但是这句话只包含了这个人的姓氏,所以我正在替换它:

string modifiedSentence = null;
string[] senSplit = sentence.Split(' ');

foreach(string word in senSplit)
{
   if(fullName.Contains(word))
   {
      modifiedSentence = sentence.Replace(word,fullName);
   }
}

现在我希望modifiedSentence是:

  比尔理查森有一辆自行车,他喜欢它

但显然(我发现了问题),如果fullName甚至包含单词'a',它会被全名替换,最终会出现这样的结果:

  比尔理查森有比尔理查森的自行车,他喜欢它

那是一场灾难,不是吗? :)如果可能的话,如何以其他方式执行此操作?谢谢

2 个答案:

答案 0 :(得分:0)

你可以这样做

modifiedSentence = new Regex(string.Join("|", fullName
    .Split(' '))).Replace(sentence, fullName, 1);
Console.WriteLine(modifiedSentence);

答案 1 :(得分:0)

如果你不知道姓氏是否是fullName中的第一个或第二个,你必须迭代两者,而不是检查它是否包含单词,测试两个单词之间的等价。 如果fullName已包含在原始句子中,请注意这不起作用。

var nameParts=fullName.Split(' ');
string modifiedSentence = null;
string[] senSplit = sentence.Split(' ');
foreach(string part in nameParts)
{
   foreach(string word in senSplit)
   {
      if(nameParts.Equals(word))
      {
         modifiedSentence = sentence.Replace(word,fullName);
      }
   }
}

虽然这可以通过更紧凑的内联方式完成,但我认为这更容易理解,更类似于原始代码。