[英]How to find matching strings upto a specific string with regex in Python
我需要在文件中找到特定的字符串,直到AUTO HEADER
行。 我不确定如何限制regex
以仅查找特定行的匹配项。 有人可以帮我弄清楚吗?
这是我的脚本:
import re
a = open("mod.txt", "r").read()
op = re.findall(r"type=(\w+)", a, re.MULTILINE)
print(op)
这是我的输入文件 mod.txt:
bla bla bla
header
module a
(
type=bye
type=junk
name=xyz type=getme
type=new
AUTO HEADER
type=dont_take_it
type=junk
type=new
Output:
['bye', 'junk', 'getme', 'new', 'dont_take_it', 'junk', 'new']
预期 output:
['bye', 'junk', 'getme', 'new']
在regex
中,我需要考虑AUTO HEADER
但不确定具体如何。
可以遍历txt文件中的每一行,找到需要的key就退出
前任:
import re
res = []
with open(filename) as infile:
for line in infile:
if "AUTO HEADER" in line:
break
op = re.search(r"type=(\w+)", line)
if op:
res.append(op.group(1))
print(res) # --> ['bye', 'junk', 'getme', 'new']
您可以在正则表达式中与 re.DOTALL 一起使用 Positive Lookahead
op = re.findall(r"type=(\w+)(?=.*AUTO HEADER)", a, re.DOTALL)
print(op)
['bye', 'junk', 'getme', 'new']
(?=.*AUTO HEADER)
正向预测以确保任何匹配的文本后面必须跟文本AUTO HEADER
。 在文本AUTO HEADER
之后有效地排除那些不需要的匹配项
re.DOTALL
允许正则表达式引擎跨行查看(以便可以向前查看AUTO HEADER
)。
这可能听起来很愚蠢,但您是否考虑过不为您的正则表达式匹配提供全文,而只提供与您的关键字匹配的文本? 就像没有理由不只是在之前快速分开它,不是吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.