擅长:python、mysql、java
<p>我的方法是将文本块拆分为行列表。接下来,遍历每一行,看看是否有匹配项。在匹配的情况下,收集上下文行(发生在当前行之前和之后的行)并返回它。这是我的代码:</p>
<pre><code>import re
def grep(pattern, block, context_lines=0):
lines = block.splitlines()
for line_number, line in enumerate(lines):
if re.match(pattern, line):
lines_with_context = lines[line_number - context_lines:line_number + context_lines + 1]
yield '\n'.join(lines_with_context)
# Try it out
text_block = """One
Two
Three
abc defg
four
five
six
abc defoobar
seven
eight
abc de"""
pattern = 'abc de.*'
for line in grep(pattern, text_block, context_lines=2):
print line
print ' -'
</code></pre>
<p>输出:</p>
^{pr2}$