Regex для захвата предложения с целевой фразой - PullRequest
2 голосов
/ 26 октября 2011

Я использую C #, чтобы найти фразу, которая может или не может существовать в блоге. Мне нужно захватить целое предложение, которое содержит целевую фразу.

Я думал об использовании метода string.contains, но он вернул бы весь пост в блоге, когда все, что мне нужно, это целевая фраза и содержащее ее предложение.

Пример:

I dont want this sentence. I also don't want this setence. But I do want this sentence.

Таким образом, здесь целевая фраза будет звучать так: «Я делаю», и регулярное выражение должно возвращать все содержащее предложение «Но я действительно хочу это предложение».

Спасибо. Aaron

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Это регулярное выражение:

resultString = Regex.Match(subjectString, @"(?<=^|\.)[^.]*?(?=\bI do\b).*(\.|$)").Value;

Применительно к вашему вводу:

I dont want this sentence. I also don't want this setence. But I do want this sentence.

Возвращает:

But I do want this sentence.

Включите RegexOptions.Singleline, если вы беспокоитесь о нескольких строках.

1 голос
/ 26 октября 2011

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

* 1003 Е.Г. *

  string data = "I dont want this sentence. I also don't want this setence. But I do want this sentence.";
  string targetPhrase = "I do";

  string[] sentences = Regex.Split(data, "\\.\\s");

  foreach (string sentence in sentences)
  {
    if (Regex.IsMatch(sentence, "\\s" + targetPhrase + "\\s"))
    {
      //.....
    }
  }
1 голос
/ 26 октября 2011

Я не знаю регулярных выражений , но вы можете использовать комбинацию функции Split и функции Contains и написать что-то вроде этого:

string DoesBlogContainSentence(string blog, string target)
{
   string[] blogSentences = blog.Split(new char[] {'.'});

   foreach(string sentence in blogSentences)
   {
      if(sentence.Contains(target))
      {
          return sentence;
      }
   }

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