python解析两行之间的文本块

python解析两行之间的文本块,python,pyparsing,Python,Pyparsing,我正在尝试使用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.se

我正在尝试使用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只是挂起。 有人能告诉我怎么做吗


谢谢,

将此调试代码添加到您的程序中:

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)
在loc 0(1,1)处匹配第一行
匹配的第一行->['ABC','..']
位置11处的赛线(3,1)
匹配行->['DEF']
位置15处的火线(3,1)
引发异常:预期行(在字符17处),(行:4,列:2)
在loc 15处匹配第二行(3,1)
引发异常:预期为“DEF”(字符16),(第4行,第1列)
回溯(最近一次呼叫最后一次):
文件“rrrr.py”,第19行,在
test.parseString(myText)
文件“C:\Python25\lib\site packages\pyparsing-1.5.5-py。。。
加薪
pyparsing.ParseException:应为“DEF”(在字符16处),(第4行,第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)
在loc 0(1,1)处匹配第一行
匹配的第一行->['ABC','..']
位置11处的赛线(3,1)
匹配行->['DEF']
位置15处的火线(3,1)
引发异常:预期行(在字符17处),(行:4,列:2)
在loc 15处匹配第二行(3,1)
引发异常:预期为“DEF”(字符16),(第4行,第1列)
回溯(最近一次呼叫最后一次):
文件“rrrr.py”,第19行,在
test.parseString(myText)
文件“C:\Python25\lib\site packages\pyparsing-1.5.5-py。。。
加薪
pyparsing.ParseException:应为“DEF”(在字符16处),(第4行,第1列)

可能不是你所期望的。

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

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)

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

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)

这对我很有用。

我甚至不认为这段代码可以编译:
def
在python中是一个保留字!(发帖时请尝试格式化代码)同意@Adrein Plisson,
def
保留,更改变量名称。def是关键字,关键字-def是关键字@Tumbelweed:你说得对,让我们使用正确的命名约定,它是一个关键字。我把它改为firstLine和secondLine,但仍然不起作用。有什么想法吗?我甚至不认为这段代码可以编译:
def
在python中是一个保留字!(发帖时请尝试格式化代码)同意@Adrein Plisson,
def
保留,更改变量名称。def是关键字,关键字-def是关键字@Tumbelweed:你说得对,让我们使用正确的命名约定,它是一个关键字。我把它改为firstLine和secondLine,但仍然不起作用。有什么想法吗?