python - 从 python 中的文本文件中读取带有正则表达式的文件片段

标签 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从此时开始读取文件,并在遇到空行时退出。有什么建议吗?

最佳答案

我认为您实际上根本不需要正则表达式,您只需使用 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

由于您知道 START 发生在 PATTERN 之后 5 行,因此无需搜索它,因此我使用 assert 来确保这就是预期的结果。匹配的行存储到 found 中,您可以使用

很好地打印它们
for line in found:
    print line

关于python - 从 python 中的文本文件中读取带有正则表达式的文件片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668867/

相关文章:

Python 在并行处理大文件时不释放 RAM

python - 如何从命令行运行模块?

javascript - 替换中的回调函数(循环内)

regex - 如何在 MongoDB 中拆分字符串?

python - 如何分解字符串并按顺序附加其字符?

python - 如何更改python中函数对象的属性?

python - Raspberry Pi Web 应用程序配置向导

java - 正则表达式 : Repeating Patterns that match different values

html - 使用 Swift 解析网站源 HTML 文件

c - 从 fgets() 输入中删除尾随换行符