所以我有一个字符串"我有一个大红车"
我希望用户能够以任何顺序放入部分字符串.所以他们可以写"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)
您只需将字符串中的单词与搜索字符串中的单词进行检查即可。
如果你愿意,你可以使用 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)
然而,可能有更好的方法来使用正则表达式来做到这一点,我只知道正则表达式的基础知识
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |