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

时间:2015-07-29 05:15:26

标签: python regex pyparsing

考虑以下文本文件:

%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。

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

python中是否有任何解决方案可以让我处理提取的文本(就像列表一样)?

3 个答案:

答案 0 :(得分:0)

尝试使用以下代码获取最后一段。

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

答案 1 :(得分:0)

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

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)

答案 2 :(得分:0)

如果你真的想使用正则表达式并且可以确保段落总是用两个换行符分隔,你可以使用它:

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

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

match.group(0)

编辑:如你所说,你正在寻找以}结尾的段落,正则表达式将是这样的:

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

这也解决了上一个问题,即在字符串中找到%zap3 where ,而不仅仅是在段落的开头。