簡體   English   中英

如何在 Python 中使用正則表達式查找與特定字符串匹配的字符串

[英]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 )。

我不認為正則表達式是這里的最佳選擇,但無論如何都可以這樣做。

你可以這樣做:

[\s\S]*(?=AUTO HEADER)

其中\s將匹配任何空白字符(空格;制表符;換行符..),而\S - 相反 - 將匹配任何非空白字符。 *將匹配所有出現的字符集。

(?=AUTO HEADER)是積極的前瞻,它基本上意味着在主表達式之后匹配一些東西並且不將其包含在結果中: 在此處輸入圖像描述

這可能聽起來很愚蠢,但您是否考慮過不為您的正則表達式匹配提供全文,而只提供與您的關鍵字匹配的文本? 就像沒有理由不只是在之前快速分開它,不是嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM