Python解析两已知行之间的文本块

1 投票
2 回答
1395 浏览
提问于 2025-04-16 06:13

我想用pyparsing这个工具来获取两行已知行之间的一段文本。比如说:

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 个回答

1

在你的程序里加上这段调试代码:

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

然后把searchString改成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)

可能不是你预期的结果。

0

我终于找到了我问题的答案。

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)

这个对我有效。

撰写回答