Python,正则表达式:是否有可能有2个结束锚点?

时间:2016-06-17 19:55:09

标签: python regex

我正在使用这个正则表达式:

(r'(?<=DESCR:).*?(?=")')

从像这样格式化的日志中检索数据

 DESCR: "Cisco ASR1004 Chassis"

NAME: "CISCO2951/K9", DESCR: "CISCO2951/K9 chassis, Hw Serial#: FTX1619AK8E, Hw Revision: 1.1"

我想要一个有这种逻辑的陈述。

'DESCR:'之前和'之前找到字符串, ''' < / p>

1 个答案:

答案 0 :(得分:1)

让我回答标题中的问题,主要是:

  

是否可以有2个结束锚点?

如果通过锚点,您了解一些刚刚检查但未被消费的上下文,是的,您可以在前瞻中使用替换。

如果您想在ab之前匹配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))