Domanda

python / pyparsing

Quando uso il metodo scanString, si sta dando la posizione di inizio e fine del token abbinato, nel testo.

per es.

line = "cat bat"
pat = Word(alphas)
for i in pat.scanString(line):
    print i

ottengo il seguente:

((['cat'], {}), 0, 3)
((['bat'], {}), 4, 7)

Ma la posizione finale gatto dovrebbe essere "2", giusto? Perché sta segnalando la posizione successiva come la posizione finale?

È stato utile?

Soluzione

Ciò è coerente con le convenzioni [begin:end] affettatrici di Python, in cui la "fine" è l'indice del carattere successivo. Mettendo fine come la posizione successiva, è molto semplice da estrarre il sottostringa corrispondente utilizzando i valori restituiti:

for t,start,end in pat.scanString(line):
    print line[start:end]

Si può vedere come questo è usato se si guarda nel codice sorgente pyparsing per l'attuazione del transformString.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top