【问题标题】:Look Behind Regex看看正则表达式背后
【发布时间】:2013-07-03 13:23:46
【问题描述】:

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

我需要给定输入的东西:

Input: AAABBBCCC
Index: 012345678

正则表达式匹配将是:

  • AA 从 0,1
  • 1,2 中的 AA(即使 1 中的 A 已被消耗)
  • BB 从 3,4
  • 4,5 中的 BB(即使 4 中的 B 已被消耗)
  • 从 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})) 将不起作用。

Here's an example.

注意:我的问题在于 c#,如果这很重要的话

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    您确实需要环顾四周,但我会为此使用 positive lookahead assertion

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

    您的匹配结果将在每个match 对象的match.Groups(1) 中。

    说明:

    (?=       # 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))
    

    【讨论】:

    • 感谢蒂姆,我正在尝试最后一个解决方案,但无法成功:regexr.com?35eqh
    • 使用更好的正则表达式测试器 :) regex101.com/r/yZ6jL3 (问题可能是匹配本身的长度为零字符,正则表达式无法显示。只有捕获组包含实际文本)。再想一想,regexr 中似乎有一个错误。它发现(?=(AA|BB|CC)) 无效,(?=(AA|BB|CC) 有效...
    • 您好,我无法将其命名为组,您还可以添加命名组解决方案吗?
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多