如何在列表内的字符串中删除字符串的所有实例?

时间:2019-10-21 14:47:52

标签: c# linq

我有此代码:

phraseSources.ToList().ForEach(i => i.JmdictMeaning ?? );

我需要做的,而且我不可能使用LINQ来删除所有出现的字符串,如下所示:

[see=????????]

注意???表示可以包含除“]”之外的任意数量的字符。

出现在JmDictMeaning内部。请注意,其中可能有一个或多个,但它们始终以“ [see =”开头,以“]”结尾

3 个答案:

答案 0 :(得分:1)

要删除所有[see=...]模式,您可以尝试Regex.Replace

  using System.Text.RegularExpressions;

  ...

  // Add ", RegexOptions.IgnoreCase" if required (if "See", "SEE" should be matched)
  Regex regex = new Regex(@"\[see=[^\]]*\]");

  // "abc[see=456]789" -> "abc789"
  var result = regex.Replace(source, "");

在您的情况下:

  Regex regex = new Regex(@"\[see=[^\]]*\]"); 

  var list = phraseSources.ToList();

  list.ForEach(item => item.JmdictMeaning = regex.Replace(item.JmdictMeaning, ""));

如果要过滤出具有此类字符串的项目,则表示相同的想法:

  var result = phraseSources
    .Where(item => !regex.IsMatch(item.JmdictMeaning))
    .ToList();

答案 1 :(得分:0)

phraseSources.ToList().RemoveAll(i => i == "xyz");

我想你可能看起来像

phraseSources.ToList().RemoveAll(i => i.StartsWith("[see=") && i.EndsWith("]"));

Here's an example dotnetfiddle showing it in action

答案 2 :(得分:0)

您可以这样删除:

phraseSources.Select(ph => {ph.JmdictMeaning.Replace("[see=????????]", ""; return ph;})
    .ToList();

让我展示一个例子:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

,查询应如下所示:

IList<Person> persons = new List<Person>()
{
    new Person(){FirstName = "one1[see=????????]", LastName = "LastName1" },
    new Person(){FirstName = "two1[see=????????]", LastName = "LastName1" },
    new Person(){FirstName = "three1", LastName = "LastName1" },
    new Person(){FirstName = "one[see=????????]", LastName = "LastName1" },
    new Person(){FirstName = "two", LastName = "LastName1" },
};

persons = persons.Select(p => { p.FirstName = p.FirstName.Replace("[see=????????]", ""); 
    return p; })
    .ToList();