我有一个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;部分。如何在我的文本中为所有人提供这项工作? 感谢。
答案 0 :(得分:0)
您可以使用延迟匹配:
r"(?P<start>.*?)\(bkz: (?P<bkz>.*?)\)(?P<end>.*?)"
因为,你的模式需要来自bkz:
的数据,直到它找到结束的parantheses;你也可以使用这些信息:
r"(?P<start>.*?)\(bkz: (?P<bkz>[^)]*)\)(?P<end>.*?)"