2009-03-13 9 views
0

正規表現で助けが必要です。 2つの特定の単語の間に区切り文字を含む文字列を取得したい。デリミタを持つ文字列と一致するC#正規表現

正規表現が必要です:

Statements1 start Statements2;ステートメント3終わりの楽しみ;

'開始'と '終了'の間に ';'が複数存在することがあります。

文は複数の単語で、(。*)は単語の正規表現で使用できます。

しかし、 'start'と 'end'の間に ';'がない場合、正規表現は一致しません。また

、「末端は」

だから、正規表現が

Statements1がStatements2がStatements3を終了開始と一致してはならない「スタート」の後に遭遇した最初の「終了」でなければなりません。エンド楽しい

私は

  1. 文としてマッチが
  2. キーワード
  3. 文を「開始」だから、

を「開始」した後にする前に、この場合には、それがグループになりたいです(2番目の数字が一致しないため1番目の文字列の場合) as:

  1. ステートメント1
  2. start
  3. Statements2;ステートメント3終わりの楽しみ;

ありがとうございます。これは、あなたがリストのグループを返します

(.*)(start)(.*;.*end.*) 

答えて

1

ので、以下の正規表現は、あなたが(と慣れていないあなたの肯定的なケースと一致し、負の場合に失敗し、グループ1、2に結果を置き、場合& 3.

(.*?) (start) ((?:(?:.*?) ;)+ (?:.*?) end fun)

でしょうか? :)構文 - それらは非キャプチャ括弧を意味します。 Mastering Regular Expressionsをチェックすると、このトピックの参考になります。

+0

はい、私はfamilierですか?:構文です。しかし、この正規表現が機能していないと言って申し訳ありません。 – Archie

0
start ((Statements) ;)+ (Statements) end fun 
+0

これはキャプチャの要件を満たしていません –

+0

はい、正規表現が尋ねられませんでした... – leppie

+0

さて、元の質問は変更されました... – leppie

0

は何がしたいことと同じくらい簡単であるようですね

string[] Strings = stringToSplit.Split(new char[] { ';' }); 
    if (Strings.Count() > 1) 
    { 
     // Do your stuff 
    } 
+0

ありがとう、しかし、私は正規表現だけが欲しいです。 – Archie

0

を使用するように速くなるかもしれません。

+0

*には貪欲でない修飾子が必要です。そうでない場合は、最後の "end"と一致します。 –

+0

あなたはまったく正しいですが、lazy * sを置き換えると、最終的な "fun;"をグループ化します。次の試合で。これがどれほど重要かわからない –

関連する問題