Python string.replace不替换

Python string.replace不替换,python,python-2.7,replace,markdown,Python,Python 2.7,Replace,Markdown,我有以下代码 def render_markdown(markdown): "Replaces markdown links with plain text" # non greedy # also includes images RE_ANCHOR = re.compile(r"\[[^\[]*?\]\(.+?\)") # create a mapping mapping = load_ma

我有以下代码

    def render_markdown(markdown):
        "Replaces markdown links with plain text"
        # non greedy
        # also includes images
        RE_ANCHOR = re.compile(r"\[[^\[]*?\]\(.+?\)")
        # create a mapping
        mapping = load_mapping()
        anchors = RE_ANCHOR.findall(markdown)
        counter = -1
        while len(anchors) != 0:
            for link in anchors:
                counter += 1
                text, href = link.split('](')[:2]
                text = '-=-' + text[1:] + '-=-'
                text = text.replace(' ', '_') + '_' + str(counter)
                href = href[: -1]
                mapping[text] = href
                markdown = markdown.replace(link, text)
                anchors = RE_ANCHOR.findall(markdown)
        return markdown, mapping
但是,降价功能不会替换所有链接。几乎没有人被替换。我环顾四周,发现了许多与此相关的问题。发现的问题属于以下类型:

    abc.replace(x, y) instead of abc = abc.replace(x, y)

我正在这样做,但是字符串没有被替换。看起来原因是您的正则表达式与您期望的文本不匹配。所以循环是空的


尝试发布一些示例标记,运行代码,并添加打印语句,以便可以看到所有中间结果(尤其是锚列表)。有了它,调试就容易多了:-)

我不明白当你已经在使用正则表达式时为什么要使用
replace
re
库为您提供了执行所需操作的工具,而无需两次定位字符串(一次使用regex,一次使用
replace

例如,包含匹配文本的位置。您可以使用文本切片来进行自己的字符串替换。但即使这样也没有必要,因为您可以使用
re
库在找到匹配项时为您进行替换。您只需要定义一个接受MathObject并返回替换它的文本的callable

def render_markdown(markdown):
    "Replaces markdown links with plain text"

    RE_ANCHOR = re.compile(r"\[[^\[]*?\]\(.+?\)")

    mapping = load_mapping()

    def replace_link(m):
        # process your link here...
        mapping[text] = href
        return text

    return RE_ANCHOR.sub(replace_link, markdown)
如果您想在正则表达式中添加一些内容,可以让正则表达式将链接分解为可以作为组在match对象上访问的部分。例如:

RE_ANCHOR = re.compile(r"\[([^\[]*?)\]\((.+?)\)")

# ...

text = m.group(1)
link = m.group(2)

我所做的只是在每个文本和链接(括号内)周围添加一组括号。尽管如此,我认为您的正则表达式不够复杂,无法匹配降价文档中所有可能的链接。例如,库允许在链接的“文本”部分中至少有六级嵌套括号。不要忘记链接中定义的标题(如
(url“title”)
)。但这只是表面现象。此外,这将是一个单独的问题。

你能举个例子说明你预期会发生什么吗?你为什么不使用available to install ready to go?@Kind?所有这些都是为了教育我自己。因此,我从零开始建造。我希望被替换为-=-search-=-我已经通过在函数中添加打印语句进行了验证。每个链接都是由reg ex按预期找到的。但是,replace函数的返回值与提供的原始值相同。这是不一致的。有时它会取代,有时它不会。有什么想法吗?如果你不发布你的样本数据和预期输出,很难给你有意义的帮助。
replace(old,new)
不替换任何东西的通常原因是没有与旧的完全匹配。谢谢。关于嵌套括号,您是对的。我最终会找到他们的。到目前为止,我已经更改了代码以使用您描述的方式。然而,我仍然不明白为什么没有更换。除非我的代码中有缺陷,否则逻辑是非常清楚和明确的。唯一的缺点是效率不高。无论如何谢谢你的帮助D