带管道的正则表达式组(2 个有效模式),对该组的反向引用并立即选择另一个

Regex group with pipe (2 valid patterns), negative backreference to that group and choose the other one now

这个问题我遇到过几次,但就是找不到解决方案。

基于此我尝试实现与他相反的效果。 而不是只匹配 AA...AABB...BB 我只想在第二组相反时进行匹配,也许你可以说 if/else 条件。

如果 AA 搜索 BB elif BB 搜索 AA 否则没有匹配项。

AA...AA #no match
AA...BB #match
AA...CC #no match
BB...AA #match

在我的案例中,我知道恰好会有两种模式(AA 或 BB),但不知道它们的顺序。所以我需要类似“匹配模式 AA 或 BB,然后是我不关心的任何东西,然后是与之前匹配的完全相反的东西”。

我在 SO 和 python 的文档中阅读了几篇文章,反向引用对我来说很清楚。我也更接近 negative lookahead assertion 但这里的问题是它只是定义它必须与之前的匹配不同,所以如果我捕获的组是 (AA|BB) 并且它与 [=13= 匹配],那么 (?!\1) 将匹配除 AA.

之外的任何其他内容

我希望我说清楚了我被困在哪里,如果有任何帮助,我将不胜感激。

看来你可以使用:

^(AA|BB).*(?!)(AA|BB)$

在线查看demo


  • ^ - Start-line锚点;
  • (AA|BB) - 第一个捕获组匹配 'AA' 'BB';
  • .* - 匹配除换行符以外的任何 0+(贪心)字符;
  • (?!) - 断言位置的否定前瞻后跟第一个捕获组(反向引用)中的捕获文本;
  • (AA|BB) - 第二个捕获组匹配 'AA' 'BB';
  • $ - End-line锚.