2017-04-01 8 views
-1

私は2つのファイルを持っていますが、いくつかのキーワードとプレーンテキストのmyfile.txtを持っています。私はmyfile.txtを開き、各キーワードから始まる特定のテキストを抽出する必要があります"!"で終わります。 例:通常のファイル繰返し

キーワードファイル:
は VRF-
VRF-B

myfile.txtの:あなたが
あるか

こんにちは

xvrf-a
番号1

こんにちは
あなたは
です!
xvrf-b
番号2

出力は次のようになります。

X VRF-
数1

X VRF-B
番号2

Iは、以下のコードを試みた:として取得

import re 
crazy = open("keyword.txt","r+") 
lines = crazy.readlines() 
for word in lines: 
    #print(word) 
    with open('mytext.txt', 'r') as fh: 
     result = re.findall(r'word[^!]+', fh.read(), re.M) 
     print(result) 
fh.close() 
crazy.close() 

出力: []は [] は一致

+0

こんにちは@RomanPerekhrest、私が行った努力をし、これが最後の部分のduplicate..its継続ではありません:あなたはちょうどあなたが欲しいあなたの出力形式であることを確認する必要がありキーワードファイルを反復しようとしましたが、問題は、正規表現にキーワードを入れている間に正しい結果を得ることができないことです.In ++では、vlaueを取得し、それに応じてvlaueを取得します。キーワードファイルと平文を繰り返し処理するためにループを実行しましたが、問題は、正規表現でリスト値を使用できないことです。パターンに一致する特定のテキストを使用しています。 クレイジー=オープン( "keyword.txt"、 "R +") ライン= crazy.readlines() 行のワードのための再 –

+0

@Ericインポート:オープン( 'mytext.txt' と #print(ワード) 、 fh.read()、re.M) fh.close() crazy.close( 'r')fh: 結果は次のとおりです:re.findall(r'word [^!] + '、fh.read()、re.M) print ) –

+0

ちょうど私が正規表現のリストの値のために使用したいと思っていることを知りたいなら...先に進む方法...ここで私は単語を使用しています(keyword.txtファイルに記述されているキーワード値です) –

答えて

0

r'word[^!]+'が探していないことを意味します部分文字列"word"の後に任意の数の文字があり、"!"ではありません。変数wordに定義されている文字列は検索されません。

import re 

with open('mytext.txt') as fh:  
    mytext = fh.read() 

with open("keyword.txt") as crazy: 
    for word in crazy: 
     word = word.strip() 
     results = re.findall(word+'[^!]+!', mytext, re.M) 
     for result in results: 
      print(result) 

それは出力:

vrf-a 
number 1 
! 
vrf-b 
number 2 
! 
+0

Thanks @eric !! –

0

あなたは変数ではない文字列としての単語を使用する必要が

はここで動作するコードです。下記のリンクの少しの助けを借りて:

How to use a variable inside a regular expression?

私は、我々のコードに少し変更を行ったし、それが今で正常に動作します。私は...

import re 
crazy = open("keyword.txt","r+") 
lines = crazy.readlines() 
for word in lines: 
    with open('mytext.txt', 'r') as fh: 
     result = re.findall(re.escape(word) + r'[^!]+', fh.read(), re.M) 
     print(''.join(result)) 
fh.close() 
crazy.close() 

ベスト

関連する問題