Мне нужно разобрать некоторые операторы, но мне нужна гибкость использования нескольких слов для обозначения оператора.
eg.
string = """
start some statement end
other stuff in between
start some other statement.
other stuff in between
start another statement
"""
в этом случае end
, .
и конец строки являются маркерами, которые будут сигнализировать о конце оператора, который я ищу.
Я пробовал следующее:
from pyparsing import restOfLine, SkipTo
skip_to_end_of_line = restOfLine
skip_to_dot = SkipTo('.', include=False)
skip_to_end = SkipTo('end', include=False)
statement = 'start' + skip_to_end_of_line^skip_to_dot^skip_to_end
statement.searchString(string)
([(['start some statement end\nother stuff in between\nstart some other statement'], {}), (['start', ' another statement'], {})], {})
Используя функцию ИЛИ, она возвращает самую большую строку, если совпадений больше двух, я хотел бы, чтобы ИЛИ возвращал самую короткую строку, в результате чего
([(['start', ' some statement end'], {}), (['start', ' some other statement.'], {}), (['start', ' another statement'], {})], {})