2017-04-01 70 views
-1

我有2個文件,其中一個與一些關鍵字和其他與純文本ie myfile.txt,我需要打開一個myfile.txt並提取特定文本開始與每個關鍵字(在關鍵字文件中提到)並以「!」結尾 例如:定期exp文件迭代

關鍵字文件:
VRF-A
VRF-B

的myfile.txt:

你好
你怎麼樣

x vrf-a
number 1

hi
howa are you

x vrf-b
2號

輸出應該是:

X VRF-A
數1

X VRF-B
數2

我嘗試下面的代碼:

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延續......我試圖迭代關鍵字文件,但問題是,我無法得到正確的結果,而我把正則表達式中的關鍵字..在c + +,我們準備&獲得vlaue,並相應地得到corrosponding vlaue ..在這裏,我已經運行循環迭代th關鍵字文件和明文,但問題是,我不能夠在正則表達式中使用列表值。它使用specfic文本來匹配pattern..not列表索引.. –

+0

@Eric進口重新 瘋狂=打開( 「keyword.txt」, 「R +」) 線= crazy.readlines() 用於行字: #PRINT(字) 張開( 'mytext.txt', 'r')爲fh: result = re.findall(r'word [^!] +',fh.read(),re.M) print(result) fh.close() crazy.close ) –

+0

只是好奇地知道......如果我們想用於正則表達式中的列表值...如何繼續...在這裏我使用word(這是在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

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

最佳