0

有没有办法对组进行替换?

假设我正在尝试根据自定义格式将链接插入文本。所以,鉴于这样的事情:

This is a random text. This should be a [[link somewhere]]. And some more text at the end.

我想结束

This is a random text. This should be a <a href="/link_somewhere">link somewhere</a>. And some more text at the end.

我知道这'\[\[(.*?)\]\]'会将方括号内的内容匹配为组 1,但是我想在组 1 上进行另一个替换,以便我可以用_.

这在单个re.sub正则表达式中可行吗?

4

2 回答 2

3

您可以使用函数代替字符串。

>>> import re
>>> def as_link(match):
...     link = match.group(1)
...     return '<a href="{}">{}</a>'.format(link.replace(' ', '_'), link)
...
>>> text = 'This is a random text. This should be a [[link somewhere]]. And some more text at the end.'
>>> re.sub(r'\[\[(.*?)\]\]', as_link, text)
'This is a random text. This should be a <a href="link_somewhere">link somewhere</a>. And some more text at the end.'
于 2013-10-06T06:18:23.990 回答
1

你可以做这样的事情。

import re

pattern = re.compile(r'\[\[([^]]+)\]\]')

def convert(text): 
    def replace(match):
        link = match.group(1)
        return '<a href="{}">{}</a>'.format(link.replace(' ', '_'), link)
    return pattern.sub(replace, text)

s = 'This is a random text. This should be a [[link somewhere]]. .....'
convert(s)

查看工作演示

于 2013-10-06T06:21:33.970 回答