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

使用C#中的正则表达式查找字符串中任意顺序的单词的最佳方法是什么?,c#,regex,C#,Regex,所以我有一个字符串“我有一辆红色的大轿车” 我希望用户能够以任何顺序输入字符串的一部分。所以他们可以写“车大红”,然后字符串就会被找到。我知道我可以通过使用一个正则表达式字符串执行多个IsMatch调用来实现这一点,或者我可以使用一个带有锚定的字符串,例如“^(?=.*CAR)(?=.*RED)(?=.*BIG)。*$”。我想知道什么是最好的选择,或者有更好的选择吗 注意:我使用的是C#,因此任何.net正则表达式都应该可以工作。 欢迎所有建议。您只需将字符串中的单词与搜索字符串中的单词进行核对

所以我有一个字符串“我有一辆红色的大轿车”

我希望用户能够以任何顺序输入字符串的一部分。所以他们可以写“车大红”,然后字符串就会被找到。我知道我可以通过使用一个正则表达式字符串执行多个IsMatch调用来实现这一点,或者我可以使用一个带有锚定的字符串,例如
“^(?=.*CAR)(?=.*RED)(?=.*BIG)。*$”
。我想知道什么是最好的选择,或者有更好的选择吗

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

您只需将字符串中的单词与搜索字符串中的单词进行核对即可

如果你愿意,你可以用Linq来做这个

林克:
然而,使用RegEx可能会有更好的方法,我只知道RegEx的基本知识

走出RegEx的领域,你可以这样做:

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

var searchTerms = "CAR BIG RED".Split(' ').ToList();
var hasTerms = searchTerms.All(s.Contains);

没有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);

您也可以使用这个方法。查看链接中的示例。

只是一个注释:我会添加
\b
以确保匹配的内容是完整的单词而不是单词的一部分:
^(?=.*\bCAR\b)(?=..*\b)(?=.*\bBIG\b)。*$
你能进一步解释一下吗,重新阅读这篇文章,你的意思是“我有一辆闪亮的大红色汽车”来匹配“大红色汽车”吗?或者你的意思是只有当这三个词以某种特定的组合组合在一起时才可以?我的意思是“我有一辆闪亮的大红汽车”来匹配“大红汽车”?该死,如果不是这样的话会更有趣:)顺便说一句,你不需要在结尾处使用
*$
。char[]delimiter1=新的char[]{'>;字符串结果=items.FirstOrDefault(x=>searchString.Split(delimiter1,StringSplitOptions.RemoveEmptyEntries)。全部(s=>x.Split(“”).Contains)//这有助于忽略一个以上的空间,这将有助于我的情况,但否则,这是一个很好的方式去它。我相信你的正则表达式将匹配任何词,因为你正在插入什么,我会考虑一个或与酒吧。因此,尽管字符串会找到一个匹配项,如果您向字符串添加更多内容,它仍然会找到一个匹配项,这不是我正在尝试做的。虽然我仍然喜欢你的第一个回答。1)使用了两次
s
,2)从
true
开始,而不是从
false开始?因为你需要所有人都在场,对吗?
string s = "I have a BIG RED CAR";

var searchTerms = "CAR BIG RED".Split(' ').ToList();
var hasTerms = searchTerms.All(s.Contains);
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);