我有此代码:
phraseSources.ToList().ForEach(i => i.JmdictMeaning ?? );
我需要做的,而且我不可能使用LINQ来删除所有出现的字符串,如下所示:
[see=????????]
注意???表示可以包含除“]”之外的任意数量的字符。
出现在JmDictMeaning内部。请注意,其中可能有一个或多个,但它们始终以“ [see =”开头,以“]”结尾
答案 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("]"));
答案 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();