【问题标题】:Replace a string in string that is in a List<string> [closed]替换 List<string> 中的字符串中的字符串 [关闭]
【发布时间】:2014-06-12 12:15:51
【问题描述】:

我在以下问题上需要帮助

我有字符串:

string myString = "This is not a drill"

还有一个字符串列表:

List<string> lst = {"January", "james", "not"}

我想查找列表中的任何项目是否在字符串中并将其替换为 $$string$$

想要的输出:

“这不是 $$$$ 钻头”

谢谢

更新

我尝试过使用

termsList.Any(sentence.SentenceContent.Contains)

查找是否包含在字符串中 然后

Regex.Replace(input, textToFind, replace);

但是没用

【问题讨论】:

  • 我敢问...你试过什么?
  • @Bergkamp,不要在 cmets 中发布其他详细信息,而是编辑您的问题。
  • 你连seacrh都没找到string.Contains()方法???

标签: c# regex linq replace


【解决方案1】:

简单。遍历 List 中的所有字符串,然后检查 myString 是否包含该字符串。如果是,则更换它。

foreach (string item in lst)
{
    if (myString.Contains(item))
    {
        myString = myString.Replace(item, string.Format("$${0}$$", item));
    }
}

你也可以用 LINQ 做同样的事情:

lst.Where(item=> myString.Contains(item)).ToList()
   .ForEach(item => myString = myString.Replace(item, string.Format("$${0}$$", item)));

你也可以用空格分割字符串,并检查它们是否存在于List中:

 myString.Split(' ').ToList()
         .Where(x => lst.Contains(x)).ToList()
         .ForEach(item => myString = myString.Replace(item, string.Format("$${0}$$", item)));

不区分大小写

Contains(x) 更改为Contains(x, StringComparer.OrdinalIgnoreCase)

例如第三种方法:

 myString.Split(' ').ToList()
         .Where(x => lst.Contains(x, StringComparer.OrdinalIgnoreCase)).ToList()
         .ForEach(item => myString = myString.Replace(item, string.Format("$${0}$$", item)));

【讨论】:

  • 这个好像很贵
  • contains 检查并没有取得多大效果。
  • 法哈德免费送给你
  • Where() 中的错字? str.Contains(str) 将永远为真...(实际上,与 contains() 检查一样,Where() 是不必要的)。
  • @Bergkamp 我已经更新了我的答案。
猜你喜欢
  • 2011-04-12
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
相关资源
最近更新 更多