[英]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.