Vurgulamak için, "regex kullanarak ayrıştırmak" istemiyorum - "sembolik bir ağacın içine bir regex ayrıştırmak istiyorum." (Searching sadece eski getirdi ...)Regex'i AST'ye ayrıştırmak için Python kitaplığı?
Kullanım durumum: bir veritabanı üzerinden normal ifade aramayı hızlandırmak için (foo|bar)baz+(bat)*
gibi bir regex ayrıştırmak ve bir ekranda görünmesi gereken tüm alt dizeleri çıkarmak istiyorum maç. (Bu durumda, sadece baz
çünkü foo/bar dönüşümlüdür ve yarasa 0 kez görünebilir.)
Bunu yapmak için, düzenli ifade işleçleri/anlambilimine biraz ihtiyacım var.
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
Ancak, sadece dışarı baskı, ve c-uygulama sonrasında bildiğim kadarıyla söyleyebilirim yapısını korumak değildir: re.DEBUG
yakın geliyor. Sahip ayrıştırıcımı yazmadan nasıl ayrılabileceğime dair herhangi bir fikir var mı? Bunun anlamı
regex = { alternatives };
alternatives = primitive { '|' alternatives } ;
primitive = '(' regex ')' | '[' character_set ']' | ...
Bir düzenli ifade (Perl, ama sonra onun "regexes bir istisnadır kullanarak regex ayrıştıramadı:
nasıl regeg üzerinde bir normal ifade kullanma hakkında Desen? – Netwave
@DanielSanchez Düzenli ifadeleri normal ifadelerle ayrıştıramazsınız. – BlackJack
@BlackJack, regex dizesini yeniden düzenleyebilir, yani regex için "1 | 2" varsa, bu dizeyi yeniden düzenleyebilirim. – Netwave