Python 常规exp文件迭代
我有两个文件,一个有一些关键字,另一个是纯文本,即myfile.txt,我需要打开一个myfile.txt并提取特定文本,从每个关键字开始(在关键字文件中提到),以“!”结束 例如: 关键字文件: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
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,是的,你是对的。发布这个问题的主要原因是相同的。我在上一篇评论中引用了相同的内容…只是想知道我们如何在正则表达式中使用可变词中的字符串。我也尝试过谷歌,但没有成功