2014-11-11 2 views
2

Есть ли какой-либо метод, который позволяет нам возвращать true, если string a любит string b formality?Сравнение строки

экзамен:

"12:2".Like("*:*") = true 

или

"what is your name?".Like("*is*name*?")=true 

Спасибо!

+9

Нет, но вы можете посмотреть на регулярных выражениях –

+0

Regex является то, что вам нужно – Vajura

+0

является «*» вашим единственным оператором здесь? –

ответ

2

Вы можете использовать эту следующую функцию с помощью регулярного выражения

Regex.IsMatch("string", "your expression") 

Instance следующую строку следует вернуть true:

Regex.IsMatch("12:2", "/[0-9]{2,}:[0-9]{1,}/") 

Примечание: Таким образом, вы должны создать EXP каждый раз, когда для другой формат

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 
0

Вы можете использовать следующую не оптимизированный метод. Функция может не учитывать некоторые случаи, но я думаю, что это дает вам возможность начать с.

Другого возможным решением является для вас регулярных выражений

 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; 
     } 

Good Luck

Смежные вопросы