gpt4 book ai didi

regex - 当组 1、2、3 或 4 之间没有实例时,如何匹配 (group2.*|^.*)group1?

转载 作者:行者123 更新时间:2023-12-01 07:27:17 26 4
gpt4 key购买 nike

我正在使用 Python 3.4。

假设我们有四组由正则表达式组成

g1 = 'g11|g22|...|g1m'
g2 = 'g21|g22|...|g2n'
g3 = 'g32|g32|...|g3p'
g4 = 'g41|g42|...|g4q'

例如,g1 可能是 'chickens|horses|bonnet(?>!blue )'。这些组是不相交的:四个组中的任何一个元素都属于一个以上的组。这些组可以包含大于 1 的任意数量的元素。

我想匹配一个字符串当且仅当它包含group_1的任何实例,这样:

  1. 组 1-4 中的任何一个实例都没有出现在所述组_1 实例或
  2. 之前
  3. group_1 的 said 实例之前的任何组 1-4 的实例不是 group_2。

我要匹配的一些字符串:

  1. 'g11'
  2. 'g31 g11'
  3. 'g41g11'
  4. 'g11 g21 g11'(g11 的第二个实例违反规则 2。g11 的第一个实例不违反规则 1。)
  5. 'anything or nothing g11 anything or nothing'
  6. 'anything or nothing g31 anything or nothing g11'

一些我不想匹配的字符串:

  1. 'g31 g21 g11'
  2. 'g21 g11 g31'
  3. 'anything or nothing g21 anything or nothing g11 anything or nothing'

到目前为止尝试了什么:

  • 我试过:(g31|g32)(?=.*?(g11|g12))(?!.*?(g21|g22)),适用于'g31 g11''g31 g21 g11' 但如果在 g11 之后有 g21 或 g22 则失败,如 'g31 g11 g21' .

  • 我也试过 '(g31|g32).*?(g21|g22){0}.*?(g11|g22)' 有效'g31 g11''g31 g21 g11' 但不是 'g31 g31 g21 g11'

最佳答案

^(?!(?:(?!g1|g2).)*(?:g21|g22)(?:(?!g31|g32|g41|g42).)*(?:g11|g12)).*?(?:g11|g12).*$

你可以试试这个。看演示。

https://regex101.com/r/hI0qP0/16

关于regex - 当组 1、2、3 或 4 之间没有实例时,如何匹配 (group2.*|^.*)group1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30823771/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com