Python 正则表达式是否只将第一个匹配写入输出文件?

Python 正则表达式是否只将第一个匹配写入输出文件?,python,python-3.x,Python,Python 3.x,我有一个文本如下的输入文件: 1,A:E29, A:H31, A:K32, A:K33, A:D34, A:H35,6,0 1,A:L1, A:K2, A:E3, A:A4, A:E5, A:H7,0 import re pattern = re.compile("\w:\w*\d\d*\W\s*") f= open("masterfile.txt","a+") for i, line in enumerate(open('inputfile.txt')): for match in re.f

我有一个文本如下的输入文件:

1,A:E29, A:H31, A:K32, A:K33, A:D34, A:H35,6,0
1,A:L1, A:K2, A:E3, A:A4, A:E5, A:H7,0
import re
pattern = re.compile("\w:\w*\d\d*\W\s*")
f= open("masterfile.txt","a+")
for i, line in enumerate(open('inputfile.txt')):
for match in re.findall(pattern, line):
    print(match)
    f.write(match)
    break
else:
    f.write('\n')
我想编写一个正则表达式进行提取,以便写入我的输出文件的输出为:

A:E29, A:H31, A:K32, A:K33, A:D34, A:H35
A:L1, A:K2, A:E3, A:A4, A:E5, A:H7
我根据python文档编写了一些代码,试图使用正则表达式来实现这一点。出于某种原因,我得到以下输出:

(Empty line)
A:E29, A:L1, 
我的代码如下:

1,A:E29, A:H31, A:K32, A:K33, A:D34, A:H35,6,0
1,A:L1, A:K2, A:E3, A:A4, A:E5, A:H7,0
import re
pattern = re.compile("\w:\w*\d\d*\W\s*")
f= open("masterfile.txt","a+")
for i, line in enumerate(open('inputfile.txt')):
for match in re.findall(pattern, line):
    print(match)
    f.write(match)
    break
else:
    f.write('\n')
此外,为什么我的输出不至少:

A:E29, 
(Empty line)
A:L1,

谢谢你的帮助

您不需要使用
break
else:
。只需在写入匹配项后调用
f.write('\n')

在没有匹配项的情况下,您可以检查并写一个空行

import re
pattern = re.compile("\w:\w*\d+\W\s*")
with open("masterfile.txt","a") as f, open('inputfile.txt') as infile:
    for i, line in enumerate(infile):
        matches = re.findall(pattern, line)
        if len(matches) > 0:
            f.write("".join(matches))
        else:
            f.write("\n")
        f.write('\n')

好吧,你打破了你的循环,所以…仅供参考,
\d\d*
可以简化为
\d+
<代码>+表示“1或更多”,我正试图使用中断插入新行以获得预期的输出。删除中断后,另一个预期输出返回。如何在预期输出中添加空行?我不希望在未找到匹配项的事件中使用空行。我想在每组匹配之间留一个空行。例如,第1行是:A:E29、A:H31、A:K32、A:K33、A:D34、A:H35第2行是:空白行第3行是:A:L1、A:K2、A:E3、A:A4、A:E5、A:H7为什么要将其放在
其他:
中?这只在您不中断的情况下运行。如果没有匹配项,是否需要两个空行,一个用于空的匹配项集,另一个用于“中间”行?我认为我编写它的方式将返回给定行上的所有匹配项。例如:A:E29,A:H31,A:K32,A:K33,A:D34,A:H35。然后它将转到else并生成一个新行,然后返回下一组匹配项。我只是希望为每组匹配项创建一个空白的“中间”行。在我的示例中,集合1:A:E29、A:H31、A:K32、A:K33、A:D34、A:H35和集合2是:A:L1、A:K2、A:E3、A:A4、A:E5、A:H7