Регулярное выражение для поиска подстроки - PullRequest
1 голос
/ 27 февраля 2010

Является ли регулярное выражение правильным способом решения этой проблемы?

У меня есть список строк (Большая Обезьяна, Большая Птица, Маленькая Птица, Маленькая Обезьяна, Средняя Обезьяна, Серебряная Обезьяна, Синяя Обезьяна, Черная Обезьяна), если я введу «Большой», регулярное выражение должно вернуться (Большая Обезьяна, Большая Bird), если я введу 'al', будет выведен список 'Small Bird, Small Ape). Возможно ли это, что-то вроде контекстного поиска с регулярными выражениями?

Ответы [ 4 ]

0 голосов
/ 27 февраля 2010

Да, регулярное выражение - отличный способ сделать это.

Вот пример консольного приложения на C #, которое принимает то, что вы хотите сопоставить в качестве аргумента; например, «большой» или «al», как в вопросе. Внутри аргумент используется как регулярное выражение для сопоставления с вашими примерами ввода.

код

  static void Main(string[] args)
  {
        // Inputs to try to match.
        string[] inputs = { "Big Ape", "Big Bird", "Small Bird", "Small Ape",
                            "Medium Ape", "Silver Ape", "Blue Ape", "Black Ape" };

        var stringToMatch = args[0];
        Regex regex = new Regex(stringToMatch, RegexOptions.IgnoreCase);

        // Container for all inputs that match the given regular expression.
        var matchList = new List<string>();
        foreach (var input in inputs)
        {
            Match parse = regex.Match(input);
            if (parse.Success)
            {
                matchList.Add(input);
                Console.WriteLine(input);
            }
        }
  }

выход

SampleApplication.exe al
Маленькая птичка
Маленькая обезьяна

SampleApplication.exe большой
Большая Обезьяна
Большая птица

0 голосов
/ 27 февраля 2010

да, это возможно, регулярное выражение может определить, соответствует строка или нет шаблону, например:

соответствует ли Big Ape / Big /? => да «Маленькая обезьяна» соответствует / Большая /? => нет «Большая обезьяна» соответствует / al /? => нет «Маленькая обезьяна» соответствует / al /? => да

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

но регулярные выражения действительно полезны при работе с более сложным шаблоном. В вашем случае ваш язык программирования может предоставить более простую функцию для вашей проблемы. например, в php:

соответствует ли Big Ape / Big /? перевести на (strpos ('Big Ape', 'Big') !== false)

0 голосов
/ 27 февраля 2010

Это просто, но RE более мощные, чем нужно для простого сопоставления подстрок.

Вот пример на python

import re   ### regular expression library

possibilities = ['Big Ape', 'Big Bird', 'Small Bird', 'Small Ape',
                 'Medium Ape', 'Silver Ape', 'Blue Ape', 'Black Ape']

def search(list, pattern):
    output = []
    for item in list:
       match = re.search(pattern, item)
       if match:
           output.append(item)
    return output

Выход:

>>> search(possibilities, 'Big')
['Big Ape', 'Big Bird']

>>> search(possibilities, 'al')
['Small Bird', 'Small Ape']
0 голосов
/ 27 февраля 2010

регулярное выражение может сделать это для вас, да. В зависимости от языка программирования, который вы используете .Contains("Big") или что-то подобное, может быть более простой подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...