我正在使用这个正则表达式:
(r'(?<=DESCR:).*?(?=")')
从像这样格式化的日志中检索数据
DESCR: "Cisco ASR1004 Chassis"
或
NAME: "CISCO2951/K9", DESCR: "CISCO2951/K9 chassis, Hw Serial#: FTX1619AK8E, Hw Revision: 1.1"
我想要一个有这种逻辑的陈述。
在'DESCR:'之前和'之前找到字符串, 或 ''' < / p>
答案 0 :(得分:1)
让我回答标题中的问题,主要是:
是否可以有2个结束锚点?
如果通过锚点,您了解一些刚刚检查但未被消费的上下文,是的,您可以在前瞻中使用替换。
如果您想在a
或b
之前匹配cd
,请使用a(?=b|cd)
。
因此,您的正则表达式可以更改为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))