使用正則表達式,我想從Emacs組織模式文件,這是簡單的文本文件中提取某些部分。這些組織文件中的條目以*
開頭,有時這些條目具有屬性。一個簡單的例子可以在下面找到:Python多行正則表達式與組織模式文件
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)
工程就像一個魅力,非常感謝!出於好奇,包括非正則表達式解決方案在內的其他可能性是什麼? –
@BerndWeiss:對不起,離開了。更新了答案並添加了非正則表達式解決方案。 – Jan
再次感謝您的幫助!不過,我應該強調的是,在標題中可以找到比「標題」更多的詞。我已經用適合我的解決方案更新了我的問題。 –