簡體   English   中英

使用C#中的正則表達式以任何順序查找字符串中單詞的最佳方法是什么?

[英]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

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.

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