正则表达式只写第一个匹配到输出文件?

时间:2019-03-21 15:42:22

标签: 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

我想编写一个正则表达式来提取,这样写入我的out文件的输出将是:

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, 

我的代码如下:

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,

谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您不需要使用breakelse:。写下比赛后,只需致电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')