我正在使用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的元素。
'g11'
'g31 g11'
'g41g11'
'g11 g21 g11'
(g11的第二个实例违反了规则2. g11的第一个实例没有,而且规则1也满足。)'anything or nothing g11 anything or nothing'
'anything or nothing g31 anything or nothing g11'
'g31 g21 g11'
'g21 g11 g31'
'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'
。
答案 0 :(得分:1)
^(?!(?:(?!g1|g2).)*(?:g21|g22)(?:(?!g31|g32|g41|g42).)*(?:g11|g12)).*?(?:g11|g12).*$
你可以尝试一下。参见演示。