Podkreślam, że nie chcę "analizować za pomocą wyrażeń regularnych" - chcę "parsować wyrażenie regularne w symboliczne drzewo". (Przeszukiwanie przyniosło tylko poprzednie ...)Biblioteka Pythona do parsowania regex do AST?
Mój przypadek użycia: aby przyspieszyć wyszukiwanie wyrażenia regularnego w bazie danych, chciałbym przetworzyć wyrażenie regularne takie jak (foo|bar)baz+(bat)*
i wyciągnąć wszystkie podciągi, które MUSZĄ pojawić się w mecz. (W tym przypadku jest to tylko baz
, ponieważ foo/bar są zmiennymi, a bat może pojawić się 0 razy.)
Aby to zrobić, potrzebuję zrozumienia operatorów/semantyki regex. re.DEBUG
jest najbliższe:
In [7]: re.compile('(foo|bar)baz+(bat)', re.DEBUG)
subpattern 1
branch
literal 102
literal 111
literal 111
or
literal 98
literal 97
literal 114
literal 98
literal 97
max_repeat 1 4294967295
literal 122
subpattern 2
literal 98
literal 97
literal 116
Jednak to tylko drukowanie i c-realizacja nie zachowuje strukturę potem o ile mogę powiedzieć. Wszelkich pomysłów, w jaki sposób można przeanalizować to bez pisania parser właściciela?
jak o użyciu regex nad regeg wzór? – Netwave
@DanielSanchez Nie można parsować wyrażeń regularnych wyrażeniem regularnym. – BlackJack
@BlackJack, możesz wyreolować ciąg regex, mam na myśli, jeśli mam "1 | 2" dla mojego regex y można ponownie wypisać ten ciąg. – Netwave