emacs中的rx宏(請參閱http://www.emacswiki.org/emacs/rx和http://doc.endlessparentheses.com/Fun/rx)可以以模塊化和可讀的方式指定正則表達式(至少您不必關心引用問題)。例如:在python中是否有與emacs'rx宏相當的功能?
結果
"ac?b"
有什麼在Python可比性?
emacs中的rx宏(請參閱http://www.emacswiki.org/emacs/rx和http://doc.endlessparentheses.com/Fun/rx)可以以模塊化和可讀的方式指定正則表達式(至少您不必關心引用問題)。例如:在python中是否有與emacs'rx宏相當的功能?
結果
"ac?b"
有什麼在Python可比性?
IMO,使用LISP語法來定義RegEx不是經典用法。如何保持這一點? RegEx語言幾乎是一個標準;幾乎每個人都可讀rx
不是。你知道嗎Omnimark
?它有一個漂亮但冗長的語法。現在人們遺忘......
要做到這一點,你可以定義簡單的功能,如:
def optional(regex):
return regex + "?"
def regex(*args):
return "".join(args)
REGEX = regex("a", optional("b"), "c")
print(REGEX)
您將獲得:
ab?c
對不起 - 我並不是想表達我想在Python中使用lisp語法,而且,您的示例演示瞭如何但是我並不打算自己實現這樣的一個東西,但是有興趣知道它是否已經存在,而且在emacs中,據我所知,rx的使用並不少見,特別是它允許重新使用regexp表達式來構建更大的正則表達式,否則您必須手動使用concat操作來實現這些正則表達式,並且確實會變得很難看。 –
我認爲這是很難做出的,因爲低類似的東西Python語法的靈活性。 DSL在Python中並不流行,通常只有Java風格的「構建者」。最近的選擇是're.X'和'「」'''多行字符串 – kolen