2016-01-15 100 views
4

emacs中的rx宏(请参阅http://www.emacswiki.org/emacs/rxhttp://doc.endlessparentheses.com/Fun/rx)可以以模块化和可读的方式指定正则表达式(至少您不必关心引用问题)。例如:在python中是否有与emacs'rx宏相当的功能?

结果

"ac?b" 

有什么在Python可比性?

+0

我认为这是很难做出的,因为低类似的东西Python语法的灵活性。 DSL在Python中并不流行,通常只有Java风格的“构建者”。最近的选择是're.X'和'“”'''多行字符串 – kolen

回答

0

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 
+0

对不起 - 我并不是想表达我想在Python中使用lisp语法,而且,您的示例演示了如何但是我并不打算自己实现这样的一个东西,但是有兴趣知道它是否已经存在,而且在emacs中,据我所知,rx的使用并不少见,特别是它允许重新使用regexp表达式来构建更大的正则表达式,否则您必须手动使用concat操作来实现这些正则表达式,并且确实会变得很难看。 –

相关问题