我有一个包含以下数据的文件:
define host {
......
..... {3,9}
}
define host {
.......
...... text
}
define host {
.......
....... {3}
}
我想使用 python 正则表达式捕获所有主机定义并将它们存储在列表中(例如 ['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 {...}']
最佳答案
一个相当幼稚的解决方案是只匹配文件中从 define host
开始到下一个 define host
的所有内容。这不会检查大括号,但也不会出现与嵌套大括号匹配的复杂情况。
define\s*host\s*((?!define\s*host).)*
但是,如果存在 define host
作为主机定义的一部分显示的合理情况,您可能需要查看正则表达式以外的其他内容,因为它们不是正确的工具用于解析嵌套结构。
关于python - 捕获所有出现的模式,直到 Python 中某个单词第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56535254/