使用python从文本文件中提取一段文本

2024-05-13 02:35:26 发布

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

考虑以下文本文件:

%zap1 inside1 guhn1
%triso huin lkjkljlk
%njkjkjkj{mnlkjkl lkj={kl} lkjlkj %as
kjnkjn knkjnh kjnkjnkj={kl} knkjnkj %as
uyiu kojo={kl} lkjlk lkjlkj lkjlkj}

%zap2 inside2 guhn2
%triso huin lkjkljlk
%njkjkjkj{mnlkjkl lkj={kl} lkjlkj %as
kjnkjn knkjnh kjnkjnkj={kl} knkjnkj %as
uyiu kojo={kl} lkjlk lkjlkj lkjlkj}

%zap3 inside3 guhn3
%triso huin lkjkljlk
%njkjkjkj{mnlkjkl lkj={kl} lkjlkj %as
kjnkjn knkjnh kjnkjnkj={kl} knkjnkj %as
uyiu kojo={kl} lkjlk lkjlkj lkjlkj}

例如,如何从上述文本文件中提取以下部分(第3段)?我更喜欢使用正则表达式,如果可能的话可以使用pyparsing。在

^{pr2}$

在python中有什么解决方案可以让我处理提取的文本(就像列表一样)?在


Tags: askllkjlkjlkjkojokjnkjnkjlkjkljlkknkjnh
3条回答

如果您确实想使用regex,并且可以确保段落始终由两个换行符分隔,则可以使用以下命令:

match = re.search(r'(%zap3 .+?)(?=\n\n)', s, re.DOTALL)

然后,要获得整个段落的文本,可以使用

^{pr2}$

编辑:正如您提到的,您正在查找以}结尾的段落,regex将是:

(\n\n|^)(%zap3 .+?})(?=\n\n)

这也修复了前面的一个问题,它在字符串中找到%zap3任何地方,而不仅仅是在段落的开头。在

尝试下面的代码来获取最后一段。在

with open(file) as f:
    for i in re.split(r'\n\n+', f.read()):
        if i.startswith('%zap3 inside3 guhn3'):
            print i

没有正则表达式来获取段落列表。在

with open('input.txt', 'r') as input:
    my_list = []
    para = ''
    for line in input:
        if line != '\n':
            para += line
        else:
            my_list.append(para)
            para = ''
    my_list.append(para)

for item in my_list:
    print(item)

相关问题 更多 >