正则表达式检查以找出具有给定字符的项目
本文关键字:字符 项目 检查 正则表达式 | 更新日期: 2023-09-27 18:35:16
我有一个类
public class MyClass
{
public MyClass(int id, string name)
{
this.Id = id;
//Id = id;
this.Name = name;
}
public int Id { get; set; }
public string Name { get; set; }
}
我创建了一个 MyClass 类型的列表,并向其中添加了几个项目
List<MyClass> lst = new List<MyClass>();
lst.Add(new MyClass(1, "Name1"));
lst.Add(new MyClass(2, "ab****cdefg"));
lst.Add(new MyClass(3, "he*llo"));
lst.Add(new MyClass(4, "pa**yed"));
lst.Add(new MyClass(5, "Names2"));
lst.Add(new MyClass(6, "hi******iiii"));
lst.Add(new MyClass(7, "so*me"));
lst.Add(new MyClass(8, "so**rt"));
lst.Add(new MyClass(9, "*"));
lst.Add(new MyClass(10, "**"));
lst.Add(new MyClass(11, "t*e*s*t"));
lst.Add(new MyClass(12, "t**e**s**t"));
如何在列表中查找名称字段中只有一个*
的项目,而在另一个列表中的名称字段中有两个**
的项目。我想通过 linq 或正则表达式来做,也邀请任何其他好的选择。我尝试使用contains
方法,但所有项目都有*
.
var singlestar = lst.Where(x => x.Name.Contains("*")).ToList();
这应该只匹配一个"''*"和两个"''*''*"的名称
var singlestar = lst.Where(x =>Regex.Matches(x.Name, "''*").Count == 1).ToList();
var twostar = lst.Where(x =>Regex.Matches(x.Name, "''*''*").Count == 1).ToList();
如果你只需要一颗星,我怀疑那些不应该包含至少 2 颗星。如果星星可能出现在其他地方,正则表达式可能会更好。
var singlestar = lst.Where(x => (x.Name.Contains("*") and !(x.Name.Contains("**")))).ToList();
var doublestar = lst.Where(x => (x.Name.Contains("**") and !(x.Name.Contains("***")))).ToList();
或使用正则表达式
Regex rgx1 = new Regex(@"^[^*]*''*[^*]*$");
Regex rgx2 = new Regex(@"^[^*]*''*''*[^*]*$");
var singlestar = lst.Where(x => rgx1.IsMatch(x.Name)).ToList();
var doublestar = lst.Where(x => rgx2.IsMatch(x.Name)).ToList();
使用正则表达式,名称中其他任何地方都不应该有其他星星。