正则表达式只发现一次

时间:2014-08-07 14:53:45

标签: python regex django django-templates

我有一个django模板标记的正则表达式,可以找到像'(bkz:something)'这样的表达式。这是我的代码:

@register.filter(name='bkzs')
def bkzs(text):
    pattern = re.compile(r"(?P<start>.*)\(bkz: (?P<bkz>.*)\)(?P<end>.*)")
    link = r'\g<start>(bkz: <a href="/baslik/\g<bkz>"  title="\g<bkz>">\g<bkz></a>)\g<end>'
    text = pattern.sub(link, text)

它有效,但它只运作一次。它将文本中的最后一个配对部分配对。 你可以看到它在文本中找到&#39;(bkz:something)&并且添加了超链接,但是例如当我们的文本是&#34;(bkz:lorem)时(bkz:ipsum)(bkz) :dolor)&#34;,它只是添加超链接到&#34;(bkz:dolor)&#34;部分。如何在我的文本中为所有人提供这项工作? 感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用延迟匹配:

r"(?P<start>.*?)\(bkz: (?P<bkz>.*?)\)(?P<end>.*?)"

因为,你的模式需要来自bkz:的数据,直到它找到结束的parantheses;你也可以使用这些信息:

r"(?P<start>.*?)\(bkz: (?P<bkz>[^)]*)\)(?P<end>.*?)"