[英]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
是姓氏。 因此,在用戶界面上,我為用戶提供了一系列過濾選項。 喜歡:
等等,如果他們單擊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.