C# 是否使用.StartsWith和正则表达式筛选列表?
我有这门课:C# 是否使用.StartsWith和正则表达式筛选列表?,c#,asp.net,.net,regex,linq,C#,Asp.net,.net,Regex,Linq,我有这门课: public class SimpleUser { public int ProviderID { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public bool ExistingUser { get; set; } } 我有一个列表,我正在按对象中某个属性的第一个字母进行筛选。这非常有效: List<Simp
public class SimpleUser
{
public int ProviderID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool ExistingUser { get; set; }
}
我有一个列表,我正在按对象中某个属性的第一个字母进行筛选。这非常有效:
List<SimpleUser> filtersList = originalList.Where(s => s.LastName.StartsWith(alpaPage)).ToList();
我相信我的正则表达式会
[^a-zA-Z]
但如果我错了,请纠正我。所以我有:
var regEx = new Regex("[^a-zA-Z]");
但在那之后。我迷路了.StartsWith(…
似乎不接受正则表达式。如何设置格式
谢谢!您可以尝试以下简单代码:
List<string> strList = new List<string>() { "aBC", "1asdf", "123fasdf", "a1" };
strList = strList.Where(s => Regex.IsMatch(s, @"^[^a-zA-Z].+")).ToList();
如果是123
选项,alpaPage
应等于[^a-zA-Z]
结论:使用
originalList.Where(s=>Regex.IsMatch(s.LastName,@“^[^a-zA-Z].+”).ToList();
我认为Regex在这方面做得太过火了。如评论中所述,简单检查LastName
的第一个字符就可以了:
List<SimpleUser> filtersList =
originalList.Where(s => !char.IsLetter(s.LastName[0])).ToList();
您可以只检查字符串的第一个字符,看看它是否不是
char.IsLetter()
,所以。其中(s=>!char.IsLetter(s.LastName.first())
!char.IsLetter(s.LastName[0])?@maccettura,但我需要检查除a-z或a-z之外的任何内容。不仅仅是数字。@AhmedAbdelhameed,这看起来很有希望,但在整个Link语句中会起作用吗?@caseycrokston假设originalList
是一个常规列表(例如,不是SQL查询),是的,它应该可以工作。您可以使用Regex.IsMatch
,它是shorter@Xiaoy312我在写解释的时候考虑过:好吧,这几乎是有道理的!请看我对OP的编辑。我添加了实际的类,以便您可以更好地了解发生了什么。我只需要检查LastName
。您在这里给出的示例似乎不正确是否特定于列表中的任何属性?@caseycrokston查看更新的答案。它应该为您提供有关如何使用它的足够信息。好吧,好吧!原谅我……我只是不知道如何指定在使用正则表达式时,我只对LastName进行过滤
string pattern = alpaPage + ".+";
List<SimpleUser> filtersList =
originalList.Where(s => !char.IsLetter(s.LastName[0])).ToList();
var originalList = new List<SimpleUser>()
{
new SimpleUser() { LastName = "aaa" },
new SimpleUser() { LastName = "bbb" },
new SimpleUser() { LastName = "123" },
new SimpleUser() { LastName = "#2" },
};
List<SimpleUser> filtersList =
originalList.Where(s => !char.IsLetter(s.LastName[0])).ToList();
foreach (var user in filtersList)
{
Console.WriteLine(user.LastName);
}