[英]What is the optimal way to find words in a string in any order with regex in C#?
所以我有一個字符串“我有一個大紅車”
我希望用戶能夠以任何順序放入部分字符串。 所以他們可以寫“CAR BIG RED”並找到字符串。 我知道我可以通過使用正則表達式字符串執行多個IsMatch調用來執行此操作,或者我可以使用一個帶有錨點的字符串,例如"^(?=.*CAR)(?=.*RED)(?=.*BIG).*$"
。 我想知道什么是最好的選擇還是有更好的選擇?
注意:我使用的是C#,因此任何.net正則表達式都可以使用。 歡迎所有建議。
走出正則表達式的領域,你可以做這樣的事情:
string s = "I have a BIG RED CAR";
var searchTerms = "CAR BIG RED".Split(' ').ToList();
var hasTerms = searchTerms.All(s.Contains);
您可以根據搜索字符串中的單詞檢查字符串中的單詞。
如果你願意,你可以使用Linq
List<string> items = new List<string>
{
"I have a BIG RED CAR",
"I have a BIG GREEN TRUCK",
"I have a BIG YELLOW BOAT"
};
string searchString = "CAR BIG RED";
string result = items.FirstOrDefault(x => searchString.Split(' ').All(s => x.Split(' ').Contains(s)));
使用RegEx
您可以將所有單個單詞連接成一個以管道分隔的字符串,並與\\b
運算符一起使用來檢查整個單詞。
string sentance = "I have a BIG RED CAR";
string searchString = "CAR BIG RED";
string regexPattern = string.Format(@"\b({0})\b", searchString.Replace(" ","|"));
if (Regex.IsMatch(sentance, regexPattern))
{
// found all search words in string
}
然而,使用RegEx可以更好地做到這一點,我只知道RegEx的基礎知識
沒有LINQ的簡單想法:
var st = "CAR BIG RED".Split(' ');
var sm = "I have a BIG RED CAR";
bool res = true;
foreach (string s in st)
res &= sm.Contains(s);
您還可以使用Array.FindAll方法。 請參閱鏈接中的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.