Python разборка блока текста между 2 известными линиями

StackOverflow https://stackoverflow.com/questions/4040762

  •  27-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь получить блок линий между 2 известными линиями, используя Pyparding. Например:

ABC
....
DEF

Мой код Python:

end = Literal("\n").suppress()
firstLine = Literal("ABC") + SkipTo(end)
secondLine = Literal("DEF") + SkipTo(end)
line = SkipTo(end)
test = firstLine + OneOrMore(line) + secondLine

test.searchString(myText)

-> Но это не работает. Python просто висит. Кто-нибудь может показать мне, как это сделать?

Спасибо,

Это было полезно?

Решение 2

Я наконец нашел ответ на мой вопрос.

end = Literal("\n").suppress()
firstLine = Literal("ABC") + SkipTo(end)
secondLine = Literal("DEF") + SkipTo(end)
line = ~secondLine + SkipTo(end)
test = firstLine + OneOrMore(line) + secondLine

test.searchString(myText)

Это подходит для меня.

Другие советы

Добавьте этот код отладки в вашу программу:

firstLine.setName("firstLine").setDebug()
line.setName("line").setDebug()
secondLine.setName("secondLine").setDebug()

и изменить стрелки для ParseString. SetDebug () будет распечатан каждый раз, когда выражение должно быть попытаться сопоставить, а если согласиться, что соответствовало, а если не совпадают, исключение. С вашей программой после выполнения этих изменений я получаю:

Match firstLine at loc 0(1,1)
Matched firstLine -> ['ABC', '.... ']
Match line at loc 11(3,1)
Matched line -> ['DEF ']
Match line at loc 15(3,1)
Exception raised:Expected line (at char 17), (line:4, col:2)
Match secondLine at loc 15(3,1)
Exception raised:Expected "DEF" (at char 16), (line:4, col:1)
Traceback (most recent call last):
  File "rrrr.py", line 19, in <module>
    test.parseString(myText) 
  File "C:\Python25\lib\site-packages\pyparsing-1.5.5-py...
    raise exc
pyparsing.ParseException: Expected "DEF" (at char 16), (line:4, col:1)

Вероятно, не то, что вы ожидали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top