конечное местоположение scanString: почему это end_index + 1? - PullRequest
0 голосов
/ 02 декабря 2009

питон / Pyparsing

Когда я использую метод scanString, он задает начальное и конечное местоположение сопоставленного токена в тексте.

, например

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

Я получаю следующее:

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

Но конечное местоположение кошки должно быть "2", верно? Почему он сообщает следующее местоположение как конечное местоположение?

1 Ответ

1 голос
/ 04 декабря 2009

Это согласуется с [begin:end] соглашениями о нарезке Python, где "конец" - это индекс следующего символа. Помещая конец в качестве следующего местоположения, очень просто извлечь соответствующую подстроку, используя возвращенные значения:

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

Вы можете увидеть, как это используется, если посмотрите в исходный код pyparsing для реализации transformString.

...