2017-10-24 10 views
1

私は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から抽出するまで-DOF/120928)全体pagagraph

(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) 

私の誤りは何ですか?

+0

は 'FPL'は'使用* '後、ご希望の文字/単語まで、あなたの試合を制限する必要があります。 –

+0

どうすればよいでしょうか。 – chris

+0

@ Janの回答を参照してください –

答えて

0

あなたはきっと同じように正規表現を使用できますが、これはxmlファイルのいくつかの並べ替えのように私には見えます

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

see a demo here、修飾子を気)、なぜあなたの代わりにパーサを使用していませんか?


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 stx and etxを参照してください。後者の場合
:あなたはすべてを一致している

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) 
+0

xmlのようには見えません。なぜなら、 ''や ''のような終了タグが見つからないからです。 ''はおそらく 'テキストの開始'を意味し、 ' 'は'テキストの終わり 'を表します。 – BioGeek

+1

@BioGeek:私の答えは、それぞれ「」と「」(最終的に)に変更されていると思います。 – Jan

関連する問題