Python 常规exp文件迭代

Python 常规exp文件迭代,python,python-3.x,Python,Python 3.x,我有两个文件,一个有一些关键字,另一个是纯文本,即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 二号 我尝试了以下代码: import re crazy = open("keyword.txt

我有两个文件,一个有一些关键字,另一个是纯文本,即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
二号

我尝试了以下代码:

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()  
输出获取为: [] []
表示不匹配

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
!

您需要将单词用作变量,而不是字符串。通过以下链接提供一些帮助:

我对我们的代码做了一点修改,现在可以正常工作了。您只需确保输出的格式符合您的要求:

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

贝斯特

你好@RomanPerekhrest,我已经做出了努力,这不是重复的……它是最后一部分的延续。。。我试图重复关键字文件,但问题是,我不能得到正确的结果,而我把关键字在正则表达式…在C++中,我们准备和获得VLAUE,从而得到腐蚀VLAUE。在这里,我运行for循环来迭代关键字文件和纯文本,但问题是我不能在正则表达式中使用列表值。它使用特定文本来匹配模式。而不是列表索引。@Eric import re crazy=open(“keyword.txt”,“r+”)lines=crazy.readlines()用于行中的word:#使用open打印(word)('mytext.txt','r')作为fh:result=re.findall(r'word[^!]+',fh.read(),re.M)print(result)fh.close()crazy.close()只是想知道…如果我们想在正则表达式中使用list的值…如何进行…我在这里使用word(这是keyword.txt中提到的关键字值file@Eric..刚刚更新了question@Eric,是的,你是对的。发布这个问题的主要原因是相同的。我在上一篇评论中引用了相同的内容…只是想知道我们如何在正则表达式中使用可变词中的字符串。我也尝试过谷歌,但没有成功