块的正则表达式

2024-09-28 05:28:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个文本文件中有很多开始/停止文本块

start
value1 as5q
value3 dd9w
type b
value6 dp1p
stop

start
value1 as
value2 er
type a
stop

start
value1 as5
value2 er2
type c
value4 dd1
stop

当类型为“a”时,我需要提取value1的值

拜托,你能帮帮我吗?我试过很多方法,但我还是个regex新手

提前谢谢


Tags: 文本astypestartstop文本文件ervalue1
2条回答
my_text="""start
value1 as5q
value3 dd9w
type b
value6 dp1p
stop

start
value1 as
value2 er
type a
stop

start
value1 as5
value2 er2
type c
value4 dd1
stop"""

blocks = re.findall("(?:start)(.*?)(?:stop)",my_text,re.DOTALL)

它利用非捕获组、非贪婪匹配运算符和re.DOTALL标志来匹配换行符

你想要这样的输出吗

as5q
as
as5

那么,你可以试试这个regex

(?s)start.*?value1\s+(a[^\s]*)

Demo,,,其中目标值(value1的值包含前缀“a”)被捕获到group 1\1

python脚本中,可能是这样的

import re
ss="""  copy&paste sample text in this area  """

regx= re.compile(r'(?s)start.*?value1\s+(a[^\s]*)')
for m in regx.finditer(ss):
    print(m.group(1))

相关问题 更多 >

    热门问题