我有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()
输出为: [] [] 意味着没有匹配
答案 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()
最佳