python re.sub替换函数范围问题

时间:2016-06-07 17:23:11

标签: python scope callback

我有一个方法,作为其工作的一部分,使用作为函数提供的替换值调用re.sub。此功能在此更大功能中定义。

问题是这个作为参数传递给re.sub的内部函数无法访问外部函数中定义的变量。如何使外部范围可用?

下面的代码删除了工作敏感部分。重要的部分是回调函数_unsub_link_replacement和var unsub_link,我希望回调函数可以访问它,但它没有。

一个警告是我必须使用正则表达式。

@classmethod
def process_unsub_link(cls, html_content):
    protocol = "http:" # TODO - this needs to be derived
    host = "localhost:8080" # TODO - this needs to be derived
    ns = urllib.quote("fake_namespace") # TODO - this needs to be derived
    unsub_link_section = "/callback/unsub/?ns={}".format(ns)
    unsub_link = "{}//{}{}".format(protocol, host, unsub_link_section)

    def _unsub_link_replacement(match):
        if len(match.groups()) == 2: # Success case
            value = match.groups(1)
                if value not in unsub_link:
                    do_unspecified_things()

    pattern = "(\*\|\s*UNSUB:([^\s\|]*)\s*\|\*)"
    content = re.sub(pattern, _unsub_link_replacement, html_content)
    return content

1 个答案:

答案 0 :(得分:-1)

我认为this answer会对你正在寻找的东西产生影响。

我认为简单的解决方案是使unsub_link成为一个全局变量,这似乎是hackish但会让你的回调函数可以访问它。