使用python中的文本文件中的正则表达式读取文件片段

时间:2012-03-12 14:23:33

标签: python regex string file

我有一个文本文件,我希望使用正则表达式匹配单词PATTERN,并在STARTEND之间提取文本(下面显示的文本文件)。我不想直接匹配STARTEND字段,因为我在该部分中有随机数据,但PATTERN保持不变,因此我可以轻松匹配。我有一个快速而肮脏的Python脚本,可以匹配模式,但我已经陷入了下一步。

HERE IS MY PATTERN:


        IGNORE SECTION

**************************************************
START   1   2   3   4   5
  .     .   .   .   .   .
  .     .   .   .   .   .
  .     .   .   .   .   .
END     .   .   .   .   .



TEXT    FILE    CONTINUES...........
.
.
.
.

**************************************************

如何告诉Python 读取模式下方5行的行,并在读取第一个空行时停止

这是我的剧本:

#!usr/bin/env python

import re

pattern = r'PATTERN:'+'$'

count = 0
fp = open('fileinput.txt')
for line in fp:
    count += 1

    match = re.search(pattern,line)
    if match:
        print 'Matched text:', line, 'Line', count
        line_match = count   

new_line = line_match+4

我已经标记了我想要的行,但是不能告诉Python从此时开始读取文件,并在它到达空行时退出。有什么提示吗?

2 个答案:

答案 0 :(得分:2)

我认为你根本不需要正则表达式,你可以使用endswith。这是我将如何实现它。它不可扩展,但它可以做你想要的:

matching = False
found = []
with open('fileinput.txt', 'r') as file
    it = iter(file)
    for line in it:
        if matching:
            if line.strip() == '':
                break
            else:
                found.append(line)
        elif line.endswith('PATTERN:'):
            for _ in range(6):
                next(it)
            matching = True

由于您知道STARTPATTERN之后发生了5行,因此无需搜索它,因此我使用assert来确保它在预期的位置。匹配的行存储到found,您可以使用

将其打印出来
for line in found:
    print line

答案 1 :(得分:0)

我没有很好地解释你的解释;从我能够理解的,你需要:

1)从特定模式读取文件直到空行;
2)将读取的部分与多线模式匹配。

实现这一目标:

1)使用readline()readlines()xreadlines()for line in file将所有感兴趣的文本读入一个变量中 - 最方便的是什么。
请注意,for line if file循环可以随时break停止xreadlines() - 只是停止读取。下次调用它们时,它们将从文件中的当前位置开始 2)如果您需要\n来匹配换行符,请将其与包含re.M的模式匹配或使用.标记。

for l in f:
    if re.match("PATTERN:\n",l): break
s=""
for l in f:
    if l=='\n': break
    s+=l
m=re.match("<whatever-pattern-matches-your-chunk-of-text>",s)