【发布时间】:2017-08-11 18:45:03
【问题描述】:
使用正则表达式,我想从 Emacs 组织模式文件中提取某些部分,这些部分是简单的文本文件。这些 org 文件中的条目以 * 开头,有时这些条目确实具有属性。一个简短的例子可以在下面找到:
import re
orgfiletest = """
* headline 0
* headline 1
:PROPERTIES:
:KEY: lala
:END:
* headline 2
* headline 3
:PROPERTIES:
:KEY: lblb
:END:
"""
我想提取所有具有属性的条目;提取的条目应包括这些属性。所以,我想收到以下文字:
* headline 1
:PROPERTIES:
:KEY: lala
:END:
和
* headline 3
:PROPERTIES:
:KEY: lblb
:END:
我是这样开始的
re.findall(r"\*.*\s:END:", orgfiletest, re.DOTALL)
但这也包括headline 0 和headline 2,它们没有任何属性。我的下一次尝试是利用环视,但无济于事。任何帮助深表感谢!
适合我的更新/解决方案:
感谢所有帮助我找到解决方案的人!为了将来参考,我包含了一个更新的 MWE 和适用于我的正则表达式:
import re
orgfiletest = """
* headline 0
more text
* headline 1
:PROPERTIES:
:KEY: lala
:END:
* headline foo 2
** bar 3
:PROPERTIES:
:KEY: lblb
:FOOBAR: lblb
:END:
* new headline
more text
"""
re.findall(r"^\*+ .+[\r\n](?:(?!\*)\s*:.+[\r\n]?)+", orgfiletest, re.MULTILINE)
【问题讨论】: