C # Regex, чтобы извлечь все слова, которые начинаются с цифр и содержатся в определенном списке? - PullRequest
0 голосов
/ 21 июня 2011

Учитывая набор словосочетаний, возможно ли вернуть набор совпавших наборов слов и извлечь их из заданной строки, используя RegEx?

Например, с учетом списка автомобилей:

mazda 3
mazda 4
volvo s40

Используется следующий текст:
«Я хотел купить mazda 3, но я обнаружил, что volvo s40 намного выгоднее с шинами 90gv».

Я хочу получить два разных списка из этого, которые должны возвращаться:

{mazda 3, volvo s40, 90gv} 
{I, wanted, to, buy, a, however, I, found, the, to, be, a, much, better, deal, with, the, tires}

1 Ответ

1 голос
/ 21 июня 2011

Этот код использует MatchEvaluator для совпадений (модели автомобилей) и возвращает "", поэтому модель заменяется пустой строкой. cars - список моделей автомобилей. words - список оставшихся слов. Я оставлю это вам для правильной обработки знаков препинания для ваших нужд.

List<string> cars = new List<string>();
string input =
   "I wanted to buy a mazda 3 however I found the volvo s40 to be a much better deal.";
string line = Regex.Replace(
   input, @"\b\w+\s+(?=\S*?\d)(?:\w+)",
   m =>
      {
         cars.Add(m.Value);
         return "";
      });
string [] words = line.Split(' ');

// Ouput the lists:
Console.Write ("Cars:");
foreach (string car in cars)
   Console.Write(car + "    ");
Console.WriteLine ();
Console.Write ("words: ");
foreach (string word in words)
   Console.Write(word + " ");

Производит этот вывод:

Cars:mazda 3    volvo s40
words: I wanted to buy a  however I found the  to be a much better deal.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...