使用python从航空文本中提取段落

2024-03-29 08:12:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,我尝试使用python从段落中提取文本。 文本为:

<stx>(FPL-ACF66-IN
-EH30/H-S/C
-LGKR0900
-N0100VFR KRK ARA
-LGTG0300
-DOF/120928)
<etx>
<stx>GG
(APL-ACF66-IN
-EH30/H-S/C
-LGKR0900
-N0100VFR KRK ARA
-LGTG0300
-DOF/110928)
<etx>
<stx>
(CNL-ACF66-IN
-EH30/H-S/C
-LGKR0900
-N0100VFR KRK ARA
-LGTG0300
-DOF/120928)<etx>

我想从FPL中提取整页

(FPL-ACF66-IN
-EH30/H-S/C
-LGKR0900
-N0100VFR KRK ARA
-LGTG0300
-DOF/120928)

我使用该代码,但它只提取第一行:FPL-ACF66-IN

import re

with open('FPL.txt', 'r', encoding = 'utf-8') as f:
        works = f.read()

        pattern = 'FPL'+'.*'
        w =re.findall(pattern, works, re.I)
        for work in w:
            print(work)

什么是我的错


Tags: in文本refplworksdofstxara
1条回答
网友
1楼 · 发布于 2024-03-29 08:12:04

当然可以使用(see a demo here这样的正则表达式,但要注意修饰符)

\(FPL.+?-DOF/120928\)

在我看来,这就像某种xml文件,所以为什么不改用解析器呢?


Python中的代码段:
import re

rx = re.compile(r'\(FPL.+?-DOF/120928\)', re.DOTALL)

with open("test.txt") as fp:
    data = fp.read()
    try:
        paragraph = rx.search(data).group(0)
    except:
        paragraph = None
    print(paragraph)

这就产生了

(FPL-ACF66-IN
-EH30/H-S/C
-LGKR0900
-N0100VFR KRK ARA
-LGTG0300
-DOF/120928)


如果您想在这里有所有段落,您可以使用
\([^()]+\)

甚至

<stx>(.+?)<etx>

然后在它们上面循环,参见the modified demothis one for ^{} and ^{}
对于后者:

import re

rx = re.compile(r'<stx>(.+?)<etx>', re.DOTALL)

with open("test.txt") as fp:
    data = fp.read()
    paragraphs = (m.group(1) for m in rx.finditer(data))

    for p in paragraphs:
        print(p)

相关问题 更多 >