如果字符串a喜欢字符串b形式,是否有任何方法允许我们返回true?
考试:
"12:2".Like("*:*") = true
或
"what is your name?".Like("*is*name*?")=true
谢谢!
答案 0 :(得分:2)
您可以使用正则表达式
使用以下功能Regex.IsMatch("string", "your expression")
以下行的实例应返回true
:
Regex.IsMatch("12:2", "/[0-9]{2,}:[0-9]{1,}/")
注意:这样您每次都需要为不同格式创建exp
答案 1 :(得分:0)
您可以使用以下方法检查给定字符串是否与带有通配符的类似DOS的模式匹配(即一个模式表示一个字符带'?',零个或多个字符带'*'):
public static bool IsMatch(string str, string pattern)
{
string regexString = "^" + Regex.Escape(pattern).Replace("\\*", ".*").Replace("\\?", ".") + "$";
Regex regex = new Regex(regexString);
return regex.IsMatch(regexString);
}
您可以这样称呼它:
bool match = IsMatch("what is your name?", "*is*name*?"); // Returns true
答案 2 :(得分:0)
您可以使用以下 not-optimized 方法。该功能可能没有考虑到某些情况,但我认为它给你一个起点。
另一种可能的解决方案是正则表达式
public static bool Like(string pattern, string str)
{
string[] words = pattern.Split('*').Where(w => w.Trim() != string.Empty).ToArray();
List<int> indeces = new List<int>();
for (int i = 0, l = words.Length; i < l; i++)
{
int wordIndex = str.IndexOf(words[i], StringComparison.OrdinalIgnoreCase);
if (wordIndex == -1)
return false;
else
indeces.Add(wordIndex);
}
List<int> sortedIndeces = indeces.ToList();
sortedIndeces.Sort();
for (int i = 0, l = sortedIndeces.Count; i < l; i++)
{
if (sortedIndeces[i] != indeces[i]) return false;
}
return true;
}
祝你好运