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