常规的exp文件迭代

时间:2017-04-01 20:13:02

标签: python python-3.x

我有2个文件,一个有一些关键字,另一个有纯文本,即myfile.txt,我需要打开一个myfile.txt并从每个关键字开始提取特定文本(在关键字文件中提到)并以“ !” 例如:

关键字文件:
VRF-A
vrf-b

myfile.txt的:

您好
你好吗? !
x vrf-a
1号 !

你好吗? !
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()  

输出为: [] [] 意味着没有匹配

2 个答案:

答案 0 :(得分: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
!

答案 1 :(得分: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()  

最佳