在Python中是否有类似于Emacs的rx宏的等效功能?

5

我认为很难做出类似的东西,因为Python语法的灵活性较低。在Python中,DSL并不流行,通常只有Java风格的“构建器”。最接近的替代方案将是re.X"""多行字符串。 - kolen
1个回答

0

在我看来,使用LISP语法定义正则表达式并不是一种经典用法。如何维护呢?正则表达式语言几乎是标准的,几乎每个人都可以读懂;而rx却不是。你知道Omnimark吗?它有一个漂亮但冗长的语法。现在已经被遗忘了...

为了做到这一点,您可以定义一个简单的函数,例如:

def optional(regex):
    return regex + "?"


def regex(*args):
    return "".join(args)


REGEX = regex("a", optional("b"), "c")
print(REGEX)

您将获得:

ab?c

1
抱歉造成困惑 - 我并不是想在Python中使用Lisp语法。是的,你的例子展示了这样一个包如何被实现。然而,我并没有计划自己实现这样的东西,而是想知道它是否已经存在。在Emacs中,据我所知,使用rx并不罕见。特别是因为它允许重复使用正则表达式来构建更大的正则表达式,否则你必须手动使用连接操作来实现,这可能会变得非常丑陋。 - Dirk Herrmann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接