3

私は正規表現から始めています(必要なものは常にネットから使用されます)

入力が与えられたものが必要です:

Input: AAABBBCCC
Index: 012345678

正規表現の一致は次のようになります。

  • 0,1からのAA
  • 1、2 からの AA (1 からの A は既に消費されていますが)
  • BB から 3,4
  • 4,5からのBB(4からのBはすでに消費されていますが)
  • 6,7からのCC
  • 7,8からのCC(7からのBはすでに消費されていますが)

私が今持っている正規表現は(A{2}|B{2}|C{2}). それは私の本当の問題ではありませんが、As、Bs、および Cs に対して異なる動作の正規表現があります。

look behindいくつかの演算子を使用する必要があると思いますが、試してみてください: ((A{2}|B{2}|C{2})$1)or(?<=(A{2}|B{2}|C{2}))は機能しません。

ここに例があります。

注:問題があれば、私の問題はC#にあります

4

1 に答える 1

5

ルックアラウンドが必要ですが、そのためには肯定的な先読みアサーションを使用します。

(?=(([ABC])\2))

試合結果はmatch.Groups(1)matchオブジェクトに表示されます。

説明:

(?=       # Look ahead to check that the following matches:
 (        # Match and capture in group number 1:
  (       # Match and capture in group number 2:
   [ABC]  # Any letter A, B or C
  )       # End of capturing group 2
  \2      # Now match that same letter again.
 )        # End of group 1. It now contains AA, BB or CC
)         # End of lookahead assertion

より簡単な解決策:

(?=(AA|BB|CC))
于 2013-07-03T13:25:50.480 に答える