Я пишу небольшой поиск по каталогу продуктов веб-сайта и использую регулярное выражение, чтобы определить, есть ли какие-либо строки, такие как «точная поисковая фраза», включенные в текст из текстового поля поиска. Регулярное выражение, которое я сейчас использую:
List<string> searchTermList = searchTerm.Trim().ToLower().Split(new Char[] { ' ' }).ToList();
foreach (Match match in Regex.Matches(searchTerm, "\"([^\"]*)\""))
{
//irrelevant code
}
Этот код прекрасно работает, пока я не найду что-то вроде:8" tortilla "stone ground"
Результат, который я хотел бы получить в качестве совпадения, будет"stone ground"
но вместо этого я получаю" tortilla "
.
Другие сообщения, которые я нашел для подобных вопросов, избегали двойных кавычек для дюймов, но у меня нет никакого способа надежно избежать кавычек, подобных этим примерам. Лучший вариант из других статей, которые я нашел, заключался в том, чтобы экранировать его, если он следует за числом, но пользователи могли искать такие вещи, как "burger 3-1"
в кавычках, что было бы неправильно, чтобы в этом случае экранировать последнюю кавычку.
Я хотел бы каким-то образом узнать, предшествует ли строке внутри набора кавычек пробел или пустая строка (если единственным текстом поиска является фраза в кавычках), но я неопытен и борюсь с регулярным выражением, и я чувствую, что это мой лучший вариант для решения чего-то вроде этого. Любая помощь/указатели?
[^0-9]\"
, чтобы найти"
, которому не предшествует число? Или как насчет\s\"
вместо"
, которому предшествует пробел? - person Jonny   schedule 11.07.2014