在emacs中,rx宏(参见http://www.emacswiki.org/emacs/rx和http://doc.endlessparentheses.com/Fun/rx)使得可以以模块化和易读的方式指定正则表达式(至少不需要担心引号问题)。例如:
(rx "a" (optional "c") "b")
导致
"ac?b"
在Python中有类似的东西吗?
在emacs中,rx宏(参见http://www.emacswiki.org/emacs/rx和http://doc.endlessparentheses.com/Fun/rx)使得可以以模块化和易读的方式指定正则表达式(至少不需要担心引号问题)。例如:
(rx "a" (optional "c") "b")
导致
"ac?b"
在我看来,使用LISP语法定义正则表达式并不是一种经典用法。如何维护呢?正则表达式语言几乎是标准的,几乎每个人都可以读懂;而rx
却不是。你知道Omnimark
吗?它有一个漂亮但冗长的语法。现在已经被遗忘了...
为了做到这一点,您可以定义一个简单的函数,例如:
def optional(regex):
return regex + "?"
def regex(*args):
return "".join(args)
REGEX = regex("a", optional("b"), "c")
print(REGEX)
您将获得:
ab?c
re.X
和"""
多行字符串。 - kolen