使用 筛选列表.开头为 和正则表达式?



我有这个类:

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();

但是,这是我的问题。 无论出于何种原因,此数据中的行LastName不是字母。 示例:Contractor #2其中#2是姓氏。 因此,在UI上,我为用户提供了过滤选项列表。喜欢:

  • 123
  • 一个
  • C

等。 如果他们点击 A、B 或 C...没关系。但是如果他们点击 123,现在我需要一个单独的过滤器来查找任何不以字母开头的LastName

我很确定正则表达式会涉及这里,但我没有看到如何将所有这些放在一起。

List<SimpleUser> filtersList = originalList.Where(s => s.LastName.StartsWith(?????)).ToList();

我相信我的正则表达式将是

[^a-zA-Z]

但是如果我错了,请纠正我。 所以我得到了:

var regEx = new Regex("[^a-zA-Z]");

但在那之后。我迷路了。.StartsWith(...似乎不需要正则表达式。 如何格式化?!?

谢谢!

我认为正则表达式对此矫枉过正。如注释中所述,对LastName的第一个字符进行简单的char.IsLetter检查应该可以正常工作:

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);
}

输出:

123
#2

你可以试试这个简单的代码:

List<string> strList = new List<string>() { "aBC", "1asdf", "123fasdf", "a1" };
strList = strList.Where(s => Regex.IsMatch(s, @"^[^a-zA-Z].+")).ToList();

详细信息:模式^[^a-zA-Z].+将匹配以字母以外的字符(大写或小写(开头的字符串。然后,我使用IsMatch方法来查看匹配是否成功。

因此,在您的情况下,您可以像这样组合您的模式:

string pattern = alpaPage + ".+";

如果是123选项,alpaPage应等于[^a-zA-Z]

结论:使用originalList.Where(s => Regex.IsMatch(s.LastName, @"^[^a-zA-Z].+").ToList();

最新更新