匹配由换行符括起的文本块

2024-05-16 21:49:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文件的格式总是三行后跟一个空行。哪一个正则表达式会匹配这样的三行块

line1
line2
line3

line4
line5
line6
...

我知道^\s*$可以匹配一个只包含空格的行,所以像^\s*$(.*)^\s*$这样的东西应该匹配两个空行之间的内容,但似乎不起作用


Tags: 文件内容格式空格空行line1line2line3
2条回答

您可以使用Python的^{}函数来读取行,直到找到一个空行,如下所示:

from itertools import groupby

with open('input.txt') as f_input:
    for k, g in groupby(f_input, lambda x: x != '\n'):
        if k:
            print [line.strip() for line in g]

然后将每三行作为一个块读取。如果有多余的空行,这些也会被跳过,或者如果一个块中有三行以上的空行,这些也会被作为单个块读取

这将打印以下内容:

['line1', 'line2', 'line3']
['line4', 'line5', 'line6']

您可以使用itertools.islice()一次读取4行文件,如果最后一行是换行符,则将其丢弃:

from itertools import islice

with open('input') as f:
    while True:
        lines = [line.strip() for line in islice(f, 4) if line.strip()]
        if not lines:
            break
        print(lines)    # or otherwise process them

演示

使用此输入:

line1
line2
line3

line4
line5
line6

line7
line8

输出为

['line1', 'line2', 'line3']
['line4', 'line5', 'line6']
['line7', 'line8']

这也处理了文件结束时没有一组完整的3行的情况

相关问题 更多 >