我正在尝试使用以下代码:
列表a
包含:Benny并在two.txt中搜索并打印匹配的行benny。并包含Adarsh并将adarsh添加到列表中,并应打印adarsh的匹配行。
编码:
import re
a=[]
with open('one.txt', 'r') as f:
for line in f:
res = re.findall(r'(?:Dr[.](\w+))', line)
if res:
a.extend(res)
print a
with open('two.txt', 'r') as f:
lines = f.readlines()
for key in a:
for line in lines:
if key in line:
print line
for ln1 in line #<-obtained output lines
res = re.findall(r'(?:Dr[.](\w+))', ln1)
if res:
a.extend(res)
for key in a:
for line in lines:
if key in line:
print line
one.txt包含:
Dr.Benny
two.txt包含:
本尼是好朋友Dr.Adarsh
金是个好孩子我是个好孩子
阿达什和他是最好的朋友。
输出获取:
本尼是好朋友Dr.Adarsh
期望的输出:
本尼是好朋友Dr.Adarsh
阿达什和他是最好的朋友
答案 0 :(得分:1)
您的代码的第一部分很好,因此我们可以将其简化为:
import re
a = ['Benny']
然而,第二部分毫无意义。你试图在迭代它时扩展a
,这可能会创建一个永无止境的循环。我想你想要的是:
with open('two.txt') as f:
lines = f.readlines() # get lines from second file
b = [] # new names
for line in lines: # iterate once for the new names
if any(name in line for name in a):
b.extend(re.findall(r'(?:Dr[.](\w+))', line))
a += b # add new names to original names
for line in lines: # iterate again to display results
if any(name in line for name in a):
print line
请注意:
list.extend
不执行任何操作,因此无需检查;和'\s?'
,并使字边界'\b'
显式化,这样您就可以捕获更加明智格式的名称,例如'Dr. Adarsh'
(请参阅demo )。