PyParsing - строка соответствия, за которой следует подстрока - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь использовать PyParsing для анализа некоторых автоматически сгенерированных сценариев SQL Server.Я не могу заставить синтаксический анализатор прекратить синтаксический анализ по ключевому слову GO.

from pyparsing import *

test = '''
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
'''

working = Literal("SET") + Word(printables) * 2
not_working = Literal("SET") + OneOrMore(Word(printables) + ~Literal("GO"))

print('Working')
for result, start, end in working.scanString(test):
    print( "Found {0} at [{1}:{2}]".format(result, start, end))

print('\nNot working')
for result, start, end in not_working.scanString(test):
    print( "Found {0} at [{1}:{2}]".format(result, start, end))

Вывод выглядит следующим образом:

"Working"
Found ['SET', 'ANSI_NULLS', 'ON'] at [1:18]
Found ['SET', 'QUOTED_IDENTIFIER', 'ON'] at [22:46]

"Not working -- missing the ON keyword"
Found ['SET', 'ANSI_NULLS'] at [1:15]
Found ['SET', 'QUOTED_IDENTIFIER'] at [22:43]

По какой-то причине мое "не работает"пример не получает ключевое слово ON.Как сказать парсеру остановиться, когда он увидит ключевое слово GO

...