Basit veri gibi çizgilerle ayrıştırmak için ayarlanmış aşağıdaki:PyParsing: Tüm Literalleri global olarak bastırmak mümkün mü?
aşağıdakiR1 (a/30) to R2 (b/30), metric 30
Ben yukarıdan gereken tek veri olarak:
R1, a, 30, R2, 192.168.0.2, 30, 30
kolayca tüm bu ayrıştırabilir pıhtılaşma ile, ama ya benim çıktısında bir ya da birkaç harfle bitiyor ya da ayrıştırma dilbilgisi içinde özel olarak Literal(thing).suppress()
söylemem gerekiyor ki bu da yorucu oluyor.
Word(alphanums) + '(' + Word(alphanums) + '/' + Word(nums) + ... etc.
ve edebi belirteçleri görmezden gelirler var:
İdeal olarak, ben gibi yukarıda bir gramer yazmak istiyorum. .suppressAllLiterals()
gibi bir şey söyleyebilir miyim?
Notlar:
- yeni PyParsing
- I dokümanlar okumak ve 5 ya da 6 örnekler
-
Teşekkür google
from pyparsing import ...whatever...
ParserElement.inlineLiteralsUsing(Suppress)
Şimdi ayrıştırıcı tüm dize hazır Suppress
nesneler sarılmış olacak ve yerine, sonuçların dışında kalan: hemen pyparsing aktardıktan sonra diyoruz -
Merhaba @ Paul, teşekkür! Bunu denedim - satır içi kullanılan dizeler için çalışıyor gibi görünüyor (örneğin, pp.Word (...) + 'somestring' + pp.Word (...) ', ve zaten olan şeyler için değil pp.Literal olarak adlandırılmıştır (örneğin, 'myLiteral' ile' somestring 'değiştirdiysem) Bu küçük değişiklik, dilbilgisi netliğiyle çok yardımcı oldu.Yeni zaman ayırdığınız için tekrar teşekkürler, çok takdir ediyorum –
her zaman "MyLiteral" veya sadece "myLiteral.suppress()' i de yapabilirsiniz. – PaulMcG
"Bastırma" ("blah") 'ü kullanarak bastırılmış bir literal oluşturabilir ve Suppress sınıfı için Literal yaratabilirsiniz. – PaulMcG