3

我从正则表达式开始(总是从网上使用我需要的那些)

我需要一些给定输入的东西:

Input: AAABBBCCC
Index: 012345678

正则表达式匹配将是:

  • AA 从 0,1
  • 来自 1,2 的 AA(即使来自 1 的 A 已经被消耗)
  • BB 从 3,4
  • 来自 4,5 的 BB(即使来自 4 的 B 已经被消耗)
  • CC 从 6,7
  • 来自 7,8 的 CC(即使来自 7 的 B 已经被消耗)

我现在拥有的正则表达式是(A{2}|B{2}|C{2}). 这不是我真正的问题,但我对 As、Bs 和 Cs 有不同的工作正则表达式。

我认为我应该使用一些look behind运算符,但尝试:((A{2}|B{2}|C{2})$1)(?<=(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 回答