Myślę, że nie rozumiesz pojęcia "grupy niezapisującej". Tekst dopasowany przez grupę niezapisującą nadal staje się częścią ogólnego dopasowania do wyrażenia regularnego.
Zarówno wyrażenie (?:aaa)(_bbb)
, jak i wyrażenie regex (aaa)(_bbb)
zwracają aaa_bbb
jako całkowite dopasowanie. Różnica polega na tym, że pierwsze wyrażenie ma jedną grupę przechwytującą, która zwraca _bbb
jako dopasowanie, podczas gdy drugie wyrażenie ma dwie grupy przechwytujące, które zwracają aaa
i _bbb
jako odpowiadające im dopasowania. W swoim kodzie Pythona, aby uzyskać _bbb
, musisz użyć group(1)
z pierwszym wyrażeń regularnych i group(2)
z drugim wyrażeniem regularnym.
Główną zaletą grup niezapisujących jest możliwość dodania ich do wyrażeń regularnych bez naruszania numeracji grup przechwytywania w wyrażeniu regularnym. Oferują również (nieco) lepszą wydajność, ponieważ silnik regex nie musi śledzić tekstu pasującego do grup, które nie przechwytują.
Jeśli naprawdę chcesz wykluczyć aaa
z ogólnego dopasowania do wyrażenia regularnego, musisz użyć lookaround. W tym przypadku pozytywny lookbehind rozwiązuje problem: (?<=aaa)_bbb
. W tym regex, group()
zwraca _bbb
w Pythonie. Nie potrzeba grup przechwytujących.
Moja rekomendacja jest taka, że jeśli masz możliwość korzystania z grup przechwytywania, aby uzyskać część dopasowania do wyrażenia regularnego, użyj tej metody zamiast obejrzenia.
fajne, dziękuję za edycję i odpowiedzi wskazujące na koncepcję niezapisywania grupy –