2024-09-26 17:47:04 发布
网友
我正在使用这个正则表达式:
(r'(?<=DESCR:).*?(?=")')
从如下格式的日志中检索数据
DESCR: "Cisco ASR1004 Chassis"
或者
NAME: "CISCO2951/K9", DESCR: "CISCO2951/K9 chassis, Hw Serial#: FTX1619AK8E, Hw Revision: 1.1"
我想要一个有这种逻辑的陈述。你知道吗
查找'DESCR:'之后和'之前、'或'''
请允许我回答标题中的问题,主要是:
Is it possible to have 2 ending anchors?
如果通过锚定,您了解一些刚刚检查但未使用的上下文,是的,您可以在lookahead中使用替换。你知道吗
如果要在b或cd之前匹配a,请使用a(?=b|cd)。你知道吗
b
cd
a
a(?=b|cd)
因此,您的正则表达式可以更改为r'(?<=DESCR:).*?(?=\'|,)',或者更好,可以在这里将交替转换为字符类:r'(?<=DESCR:).*?(?=[\',])'。你知道吗
r'(?<=DESCR:).*?(?=\'|,)'
r'(?<=DESCR:).*?(?=[\',])'
但是,环视没有意义,因为我们可以使用捕获组来获得子匹配值:
r'DESCR:(.*?)[\'",]'
参见regex demo
见Python demo:
import re p = re.compile(r'DESCR:\s*"(.*?)[\',"]') s = "NAME: \"CISCO2951/K9\", DESCR: \"CISCO2951/K9 chassis, Hw Serial#: FTX1619AK8E, Hw Revision: 1.1\"\nDESCR: \"Cisco ASR1004 Chassis\"" print(p.findall(s))
请允许我回答标题中的问题,主要是:
如果通过锚定,您了解一些刚刚检查但未使用的上下文,是的,您可以在lookahead中使用替换。你知道吗
如果要在
b
或cd
之前匹配a
,请使用a(?=b|cd)
。你知道吗因此,您的正则表达式可以更改为
r'(?<=DESCR:).*?(?=\'|,)'
,或者更好,可以在这里将交替转换为字符类:r'(?<=DESCR:).*?(?=[\',])'
。你知道吗但是,环视没有意义,因为我们可以使用捕获组来获得子匹配值:
参见regex demo
见Python demo:
相关问题 更多 >
编程相关推荐