text = """ Pratap
pandey
age
25
student
"""
keyword = "age"
re_compile = re.compile('((.*\n+){2})keyword((.*\n+){2})')
re_result = re.findall(re_compile, text)
我想编写一个正则表达式,用于在变量匹配时提取关键字前两行和关键字后两行。
答案 0 :(得分:0)
我不确定您要问什么。我想您想问的是如何输入名为“关键字”的变量的值
这就是您要做的那个
re.compile(f"(((.*\n+){{2}})\\s*{keyword}\\s*\n((.*\n+){{2}}))")
如果您定义关键字= <某些值>,那么上面的代码将起作用。
顺便说一句。您需要在提取时使用组1来获取所需的内容。
答案 1 :(得分:0)
Python 2.7中的可能解决方案
您可以使用未编译的正则表达式,并在其中放置一些字符串格式。
from __future__ import print_function
import re
text = """ Pratap
pandey
age
25
student
"""
keywords = ("age", "else")
for key in keywords :
print(re.findall(r'(.*\n+)(.*\n+){}\n+(.*\n+)(.*\n+)'.format(key), text))
输出:
[(' Pratap\n', 'pandey\n', '25\n', 'student\n')]
[]
(*)编辑的正则表达式。
答案 2 :(得分:0)
要在关键字前后匹配两行,请使用如下所示的正则表达式:
(?:.*(?:\r?\n)+){2}age(?:.*(?:\r?\n|$)+){3}
说明:
(?:.*(?:\r?\n|$)+){3}
实际上,您需要匹配其中的3个块,因为第一个换行符直接在关键字(age
)之后找到,而下一个换行符则找到第4行的结尾({{1} }。因此,需要第三次重复。 但是,由于这可能是字符串的结尾,因此我添加了25
作为替代。我还在$
之前添加了一个可选的\r
,如果您的字符串可能包含Windows行尾,则可以方便使用,否则请删除它们。
\n