正则表达式检查以找出具有给定字符的项目

本文关键字:字符 项目 检查 正则表达式 | 更新日期: 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();

使用正则表达式,名称中其他任何地方都不应该有其他星星。