所以我有一个字符串“我有一个大红车”
我希望用户能够以任何顺序放入部分字符串。所以他们可以写“CAR BIG RED”并找到字符串。我知道我可以通过使用Regex字符串执行多个IsMatch调用来完成此操作,或者我可以使用一个带有"^(?=.*CAR)(?=.*RED)(?=.*BIG).*$"
等锚点的字符串。我想知道什么是最好的选择还是有更好的选择?
注意:我使用的是C#,因此任何.net正则表达式都可以使用。 欢迎提出所有建议。
答案 0 :(得分:13)
走出正则表达式的领域,你可以这样做:
string s = "I have a BIG RED CAR";
var searchTerms = "CAR BIG RED".Split(' ').ToList();
var hasTerms = searchTerms.All(s.Contains);
答案 1 :(得分:4)
您可以根据搜索字符串中的单词检查字符串中的单词。
如果你想要,你可以使用LinqList<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的基础知识
答案 2 :(得分:0)
没有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);
答案 3 :(得分:0)
您也可以使用Array.FindAll方法。请参阅链接中的示例。