我有一个文本文件,我想在其中使用正则表达式匹配单词 PATTERN
并提取 START
和 END
之间的文本(文本文件如下所示)。我不想直接匹配 START
和 END
字段,因为该部分中有随机数据,但 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/