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

C# 如何删除列表中字符串中的所有字符串实例?,c#,linq,C#,Linq,我有以下代码: phraseSources.ToList().ForEach(i => i.JmdictMeaning ?? ); 我需要做的是删除所有出现的字符串,如下所示: [see=????????] phraseSources.Select(ph => {ph.JmdictMeaning.Replace("[see=????????]", ""; return ph;}) .ToList(); IList<Person> persons = new

我有以下代码:

phraseSources.ToList().ForEach(i => i.JmdictMeaning ?? );
我需要做的是删除所有出现的字符串,如下所示:

[see=????????]
phraseSources.Select(ph => {ph.JmdictMeaning.Replace("[see=????????]", ""; return ph;})
    .ToList();
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();
注意这个???表示可以有任意数量的字符,但“]”除外

出现在你内心的意义。注意可能有一个或多个,但它们总是以“[see=”开头,以“]”结尾

我想你的可能看起来像

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

您可以这样删除:

[see=????????]
phraseSources.Select(ph => {ph.JmdictMeaning.Replace("[see=????????]", ""; return ph;})
    .ToList();
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();
让我举一个例子:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
查询应如下所示:

[see=????????]
phraseSources.Select(ph => {ph.JmdictMeaning.Replace("[see=????????]", ""; return ph;})
    .ToList();
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();
IList人员=新列表()
{
newperson(){FirstName=“one1[see=?]”,LastName=“LastName1”},
newperson(){FirstName=“two1[see=???”,LastName=“LastName1”},
newperson(){FirstName=“three1”,LastName=“LastName1”},
newperson(){FirstName=“one[see=?]”,LastName=“LastName1”},
newperson(){FirstName=“two”,LastName=“LastName1”},
};
persons=persons.Select(p=>{p.FirstName=p.FirstName.Replace(“[see=?????]”,”);
返回p;})
.ToList();

要删除所有
[请参阅=…]
模式,您可以尝试
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();

您能提供一些示例数据和预期结果吗?需要注意两件事:
ToList
将创建源字符串列表的副本,而
ForEach
将不会修改列表。所以你在“修改”每个字符串的副本。对不起,这个??只是表示可以有任何字符串。谢谢Dmitry,我会在一段时间内将您的答案标记为正确,因为将问题保留为打开状态会让更多人看到并投票表决您非常好的答案。@Alan2:如果您在确定答案正确后立即将其标记为正确,会对其他人更礼貌,因此,人们可以集中精力帮助其他人解决问题。RemoveAll不返回列表,并且
.ToList()
创建一个副本,因此此代码将创建一个副本,修改该副本,然后丢弃该副本。