2016-04-28 13 views
4

私は正規表現は時折不足している中括弧

fox 
dog 

としてマッチを取得

\[(.*?)\] 

正規表現を使用している場合は、私が

The quick brown [fox] jumps over the lazy [dog] 

のようないくつかのテキストを持っていると連動中括弧の間のテキストを取得します私は中括弧のいずれかが欠けている場合でも動作正規表現を探しています。例えば

、私はこの

The quick brown [fox jumps over the lazy [dog] 

のようなテキストを持っている場合、私は試合が

アップデート「犬」を返すようにしたい:私はこの

The quick brown [fox] jumps over the lazy dog] 
のようなテキストを持っている場合 別の例を、

"fox"を返すようにマッチしたい

テキストにはmul多くの括弧も欠けている可能性があります。

私はC#を使用して、正規表現の一致から得られる結果の部分文字列を行うこともできます。ここで

+0

。 –

+0

あなたのニーズに合ったシングルワードマッチはありますか? – Xiaoy312

答えて

1

あなたが内部でどのようなキャプチャ中に最も近い[][]以外のものと一致することを計画している場合、

\[([^][]*)] 

を使用するパターンが

  • \[を詳述 - リテラル[
  • ([^][]*) - グループ1キャプチャリテラル] - []以外0+文字([^...]否定文字クラスであり、それはクラス内で定義されたもの以外のすべての文字に一致するように)(このグループ1値をRegex.Match(INPUT_STRING, REGEX_PATTERN).Groups[1].Valueを介してアクセスされる)
  • ]をINGの(それは文字クラスの外にエスケープする必要はありません)

ここregex demoとはC# demoでください:

var list = new List<string>() {"The quick brown [fox] jumps over the lazy dog]", 
     "The quick brown [fox] jumps over the lazy [dog]", 
     "The quick brown [fox jumps over the lazy [dog]"}; 
list.ForEach(m => 
      Console.WriteLine("\nMatch: " + 
       Regex.Match(m, @"\[([^][]*)]").Value + // Print the Match.Value 
       "\nGroup 1: " + 
       Regex.Match(m, @"\[([^][]*)]").Groups[1].Value)); // Print the Capture Group 1 value 

結果:これは、分散グループでのみ可能です

Match: [fox] 
Group 1: fox 

Match: [fox] 
Group 1: fox 

Match: [dog] 
Group 1: dog 
1

あなたが行く:\[[^\[]+?\]

それはちょうどchar型のクラスで[をキャプチャ避けることができます。

4

は、この方法を試してください。\[[^[]*?\]

それは[文字が含まれている場合、それはすべての一致をスキップします。

+0

これは、レイジーマッチングが適切な文字クラスを持つ貪欲なマッチングよりもコストが高いので、私の提案よりも効率が悪いです。また、[それは 'fox'を捕まえません、' [fox] 'にマッチします(http://regexstorm.net/tester?p=%5c%5b%5b%5e%5b%5d*%3f%5c% 5d&i = The + quick + brown +%5bfox%5d + jump + over + the + lazy + dog + 5d%0d%0a + quick + brown +%5bfox%5d + jump + over + the + lazy +%5bdog%5d%0d% 0a +クイック+ブラウン+%5bfox +ジャンプ+ +怠け者+%5bdog%5d)。 –

+0

私は[ここ](http://regexr.com/)でそれをテストして動作しました。しかし、メモのおかげで。 – MaKCbIMKo

+0

私はそれが現在のタスクにとって最も効率的なパターンではないことを意味します。私はあなたがどのように怠惰なマッチングが動作するか分からないと感じています。怠惰で貪欲な定量パターンがどのように機能するかについては、[この回答の回答](http://stackoverflow.com/questions/36770799/perl-regex-matching-optional-phrase-in-longer-sentence/36787675#36787675)を参照してください。 –

関連する問題