我正在使用Python 3.4。 我有三组:
g1 = 'g11|g12'
g2 = 'g21|g22'
g3 = 'g31|g32'
我希望匹配g3的任何实例,后跟除g2之外的任何内容,然后是g1。以下是我想要找到匹配的一些字符串:
'g31 anything or nothing g11'
'g31g11'
EDIT: ADDED: 'anything or nothing g31 g11 anything or nothing'
EDIT: ADDED: 'anything or nothing g21 g31 g11 anything or nothing'
这里有一些我不想找到匹配的字符串:
'g31 anything or nothing g21 anything or nothing g11'
'g31g21g11'
我试过:(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'
。
如果我可以期待固定宽度字符串,例如'g31 g11'
或'g31 g21 g11'
,那么问题将是微不足道的,并且已经有很多解决方案来解决stackoverflow上的问题。此外,我可以在没有组的情况下提出此问题,但我想避免使用[]
。
我希望我不会被告知,这与正则表达式不可能,但如果是,那就这样吧。
谢谢!
答案 0 :(得分:2)
^.*?(?:g31|g32)(?!.*?(?:g21|g22)).*?(?:g11|g12).*$
试试这个。参见演示:
答案 1 :(得分:1)