scanString posizione finale: il motivo per cui è END_INDEX + 1?
-
11-09-2019 - |
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?
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