python - 捕获所有出现的模式,直到 Python 中某个单词第一次出现

标签 python

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

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/

相关文章:

python - 两勺 django 中的 url 模式

python - "pass"与 Python 中的 "return None"相同吗?

python - 如何同步Python子进程的输出

python - 从现有列表创建新数组

python - Django 压缩错误 : Invalid input of type: 'CacheKey'

python - 动态 SQL WHERE 子句生成

python - 使用 h264 编码流式传输 openCV 帧

python - 向直方图添加图例/图例

python - 具有多个 url 路径的 CherryPy MethodDispatcher

python - 使用 Python 2.7.2 下载、命名和保存文件