簡體   English   中英

通過使用.StartsWith和正則表達式過濾列表?

[英]Filter a list by using .StartsWith and a Regular Expression?

我有這個課:

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是姓氏。 因此,在用戶界面上,我為用戶提供了一系列過濾選項。 喜歡:

  • 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(...似乎不使用RegEx。如何格式化此格式?!

謝謝!

我認為正則表達式對此是過大的。 如評論中所述,對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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM