Ben Pyparsing (ve oldukça yeni Python için) yeniyim. Sorunumu aşağı doğru neyin yanlış olduğunu gösterecek en basit forma indirmeye çalıştım (muhtemelen muhtemelen Pyparsing'e gerek duymayacağım noktaya kadar!)Pyparsing acemi setParseAction değiştirerek belirteçleri
Mektup ve rakamlardan oluşan bir dizim olduğunu varsayalım "b7 z4 a2 de c3" gibi. Her zaman bir mektup var, ama numara isteğe bağlı. Bunu kendi bireysel unsurlarına ayrıştırmak ve daha sonra bunları işlemek istiyorum, ancak hiçbir rakamı olmayan, çıplak bir harfin olduğu yerde, onu değiştirmek için kullanışlı olacaktır, böylece "varsayılan" 1 numaralı numara daha sonra vardı. Sonra her elemanı tutarlı bir şekilde işleyebilirim.
from pyparsing import *
teststring = "a2 b5 c9 d e z"
expected_letter = Word("ABCDEFGabcdefgzZxy", exact=1)
expected_number = Word(nums)
letter_and_number = expected_letter + expected_number
bare_letter = expected_letter
bare_letter.setParseAction(lambda s,l,t: t.append("1"))
elements = letter_and_number | bare_letter
line = OneOrMore(elements)
print line.parseString(teststring)
Maalesef t.append() Bir "1" listesine eklemek, hangi bekliyorum ne yapmaz şu şekildedir: Ben bir setparseAction ile bu yapabileceğini düşündüm ayrıştırılmış jetonlar. Bunun yerine, bir hata alıyorum: TypeError: 'str' nesnesi callable değil.
Ben muhtemelen sadece burada, gerçekten kalın olmak, ancak uzmanlardan biri bana düz ayarlamak misiniz.
Teşekkür
Steve pyparsing hakkında almak için temel kavramların
Ah evet, bu şimdi mükemmel bir anlam ifade ediyor! Ayrıştırma sonuçlarını yazdırdığımda, normal bir liste gibi görünüyorlardı, bu yüzden her zamanki gibi ekleyebileceğimi düşündüm. Ayrıca Isteğe bağlı bir genel çözüm sağlayan bir varsayılan ayar sağlar gerçeğini özledim.Ve gerçek programım için geçerli olacak, ki bu da buradaki indirilmiş versiyondan biraz daha karmaşık. yardımınız için çok teşekkürler ... ve kendini Pyparsing için! Steve. –