繁体   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