Я занимаюсь разработкой простого небольшого поискового механизма и хочу позволить пользователю искать фрагменты текста с пробелами. Например, пользователь может искать имя человека:
Имя: John Smith
I затем "John Smith".Split(' ')
в массив из двух элементов, {"John","Smith"}
. Затем я возвращаю все записи, которые соответствуют «Джону» и «Смиту», затем следуют записи, которые соответствуют либо "John" OR "Smith."
. Затем я не возвращаю записей для совпадений. Это не сложный сценарий, и эта часть у меня работает.
Теперь я хотел бы иметь возможность разрешать пользователю ТОЛЬКО возвращать записи, соответствующие «Джону Смиту»
Я бы хотел использовать синтаксис базовой цитаты для поиска. Поэтому, если пользователь хочет найти «Джон Смит» ИЛИ Покахонтас, он должен ввести: «Джон Смит» Покахонтас. Порядок условий абсолютно не имеет значения; «Джон Смит» не получает приоритета над Покахонтасом, потому что он стоит первым в списке.
У меня есть две основные мысли о том, как мне анализировать входные данные.
A) Using regular expression then parsing stuff (IndexOf, Split)
B) Using only the parsing methods
Я думаю, что логичным решением было бы найти материал в кавычках; затем удалите его из исходной строки и вставьте в отдельный список. Затем весь материал, оставшийся от исходной строки, можно разделить на пространство и вставить в этот отдельный список. Если есть 1 кавычка или нечетное число, оно просто удаляется из списка.
Как мне найти совпадения из регулярного выражения? Я знаю о regex.Replace, но как бы мне перебрать совпадения и вставить их в список. Я знаю, что есть некоторый изящный способ сделать это, используя делегат MatchEvaluator и linq, но я практически ничего не знаю о регулярных выражениях в c #.