带管道的正则表达式组(2 个有效模式),对该组的反向引用并立即选择另一个
Regex group with pipe (2 valid patterns), negative backreference to that group and choose the other one now
这个问题我遇到过几次,但就是找不到解决方案。
基于此我尝试实现与他相反的效果。
而不是只匹配 AA...AA
和 BB...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锚.
这个问题我遇到过几次,但就是找不到解决方案。
基于此AA...AA
和 BB...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锚.