Python中捕获模式的所有出现,直到首次出现单词

2024-09-22 15:59:07 发布

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

我有一个包含以下数据的文件:

define host { 
......
..... {3,9}
}

define host {
.......
...... text
}

define host {
.......
....... {3}
}

我想用python regex捕获所有主机定义并将它们存储在一个列表中(例如['define host {....}', 'define host {.....}'),。你知道吗

re.findall('define\ +host[^}]*', cfg_file, re.Multiline|re.DOTALL)
re.finall('define\ +host.+?(?:define\ +host)', cfg_file,re.Multiline|re.DOTALL)

在单词而不是字符第一次出现之前,以上这些对我都不起作用,如[^}]*-->;[^word]*。你知道吗

结果应该是一个包含所有主机定义的列表:

['define host {...{}..}', 'define host {...}', 'define host {...}']

Tags: 文件数据textrehost列表定义cfg
2条回答

对于主机中的{}嵌套的单个级别,可以使用:

re.findall(r'(define *host *{(({[^{}]*})|[^{}])*})', data)

一个相当简单的解决方案是只匹配文件中从define host开始到下一个define host的所有内容。这将不会检查花括号,但也没有复杂的匹配嵌套括号。你知道吗

define\s*host\s*((?!define\s*host).)*

但是,如果有一种合理的情况define host会显示为宿主定义的一部分,那么您可能需要查看正则表达式以外的其他内容,因为它们不是解析嵌套结构的正确工具。你知道吗

相关问题 更多 >