-1

私は文字列を持っています

「pqr hello world 合併は xyz が唯一の買収者として着手する予定だったが遅れた」

確認したい

"遅延"

常に 5 語以上の後に来る

"合併"

.

正規表現とC#を使用してこれをどのように達成できますか?


解決済み

これを読んだ後に答えを得ました:http://www.princeton.edu/~mlovett/reference/Regular-Expressions.pdf

解決:

Regex.IsMatch(articlecontent.ToLower().Trim(), @"\bmerger\W+(?:\w+\W+){5," + count_of_words_in_article + @"}?\bdelayed", RegexOptions.Multiline)

アイデアは、5 語の後に任意の距離で "merger" NEAR "delayed" を見つけることです。

4

3 に答える 3

1

前方

このタイプの質問で私が抱えている問題:

  • 「pqr hello world合併は、唯一の買収者として合併xyz間で行われる合併でしたが、遅れました」. の各インスタンスの後に、4 語以上離れた少なくとも 1 つのインスタンスが続きますが、各合併には独自の遅延はありません。mergerdelayed

悪いことのテストを見つけてから、プログラムロジックを使用して結果を除外または拒否する方が簡単です。

説明

この正規表現は、条件に違反するすべての文字列に一致します。正規表現が一致しない場合、その文字列は適切であると見なされます。

  • merger末尾のある a はありますかmerger
  • それぞれmergerに対応するインスタンスがありますかdelayed
  • delayedそれぞれの後に最初の 4 単語が表示されますかmerger

悪いことを探すことに加えて、式は次のことを行う必要があります。

  • 複数の線の文字列を正しく処理する
  • より大きな言葉の一部ではありませmergerdelayed

(?:^|\s)merger(?:(?=([\s\r\n]+(?:(?!delayed\b)\w+[\r\n\s]+)*?(?:merger|$)(?:[\s\r\n]|$)))|(?=([\s\r\n]+(?:\w+[\r\n\s]+){0,4}delayed(?:[\s\r\n]|$))))

ここに画像の説明を入力

サンプルテキスト

改行に注意

pqr hello world merger was merger to be 
delayed undertaken between merger xyz as the sole acquirer but got delayed

コード

using System;
using System.Text.RegularExpressions;
namespace myapp
{
  class Class1
    {
      static void Main(string[] args)
        {
          String sourcestring = "source string to match with pattern";
          Regex re = new Regex(@"(?:^|\s)merger(?:(?=([\s\r\n]+(?:(?!delayed\b)\w+[\r\n\s]+)*?(?:merger|$)(?:[\s\r\n]|$)))|(?=([\s\r\n]+(?:\w+[\r\n\s]+){0,4}delayed(?:[\s\r\n]|$))))",RegexOptions.IgnoreCase | RegexOptions.Singleline);
          MatchCollection mc = re.Matches(sourcestring);
          int mIdx=0;
          foreach (Match m in mc)
           {
            for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
              {
                Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
              }
            mIdx++;
          }
        }
    }
}

マッチ

これらは、定義したルールに違反する悪いインスタンスであることに注意してください。一致するものがない場合は、適切な文字列になります。キャプチャ グループ 1 が設定されている場合、 には対応する がありませんdelayed。キャプチャ グループ 2 が設定されている場合、最初の 4 ワード内にmergera が含まれています。delayed

[0][0] =  merger
[0][1] =  was merger 
[0][2] = 

[1][0] =  merger
[1][1] = 
[1][2] =  to be 
delayed 
于 2013-07-04T02:17:40.030 に答える
1

後読みを使用できます

(?<=merger(\s+\w+){5}\s+)delayed
于 2013-07-03T11:37:49.243 に答える