使用C#中的正则表达式以任何顺序查找字符串中单词的最佳方法是什么?

Cas*_*ben 8 c# regex

所以我有一个字符串"我有一个大红车"

我希望用户能够以任何顺序放入部分字符串.所以他们可以写"CAR BIG RED"并找到字符串.我知道我可以通过使用正则表达式字符串执行多个IsMatch调用来执行此操作,或者我可以使用带有锚点的一个字符串,例如"^(?=.*CAR)(?=.*RED)(?=.*BIG).*$".我想知道什么是最好的选择还是有更好的选择?

注意:我使用的是C#,因此任何.net正则表达式都可以使用.欢迎所有建议.

Kei*_*las 13

走出正则表达式的领域,你可以做这样的事情:

string s = "I have a BIG RED CAR";

var searchTerms = "CAR BIG RED".Split(' ').ToList();
var hasTerms = searchTerms.All(s.Contains);
Run Code Online (Sandbox Code Playgroud)


sa_*_*213 4

您只需将字符串中的单词与搜索字符串中的单词进行检查即可。

如果你愿意,你可以使用 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)));
Run Code Online (Sandbox Code Playgroud)

正则表达式:

您可以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
}
Run Code Online (Sandbox Code Playgroud)

然而,可能有更好的方法来使用正则表达式来做到这一点,我只知道正则表达式的基础知识