我有一个包含以下数据的文件:
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 {...}']
答案 0 :(得分:1)
对于主机中的{}级嵌套,可以使用:
re.findall(r'(define *host *{(({[^{}]*})|[^{}])*})', data)
答案 1 :(得分:1)
一个非常幼稚的解决方案是仅匹配从define host
到文件中下一个define host
的所有内容。这将不检查花括号,但是也没有匹配嵌套花括号的并发症。
define\s*host\s*((?!define\s*host).)*
但是,如果在合理的情况下define host
会作为主机定义的一部分出现,则您可能需要查看除正则表达式之外的其他内容,因为它们不是解析嵌套结构的正确工具