在Python中使用正则表达式替换其他内容的括号

时间:2014-03-28 15:18:19

标签: python regex

我有这样的文字:

Lorem ipsum [!one] and [!two]

我需要阅读本文:

Lorem ipsum [one](http://example.com/one) and [two](http://example.com/two)

此代码查找“[!”之间的每个单词和“]”

import re
r = r"\[\!(\w+)\]"

text = "Lorem ipsum [!one] and [!two]"

result = re.findall(r, text)

这给了我以下结果

['one', 'two']

我可以使用.replace(),但我想知道这是否适用于正则表达式。

编辑:

我需要在替换之前稍微处理匹配的文本。这是以答案为出发点的解决方案:

import re

def generate_url(input):
    # Do extra stuff here
    return "http://example.com/%s" % input

input = '''Lorem ipsum [!one] and [!two]'''
regex = "\[@([^]]+)\]"

url_generator = lambda match: "[%s](%s)" % (match.group(1), generate_url(match.group(1)))

output= re.sub(regex, url_generator, input)

2 个答案:

答案 0 :(得分:4)

您可以将re.sub()用于此目的。

input = '''Lorem ipsum [!one] and [!two]'''
input = re.sub("\[!([^]]+)\]", '[\\1](http://example.com/\\1)', input)

\\1是匹配([^]]+)

的正则表达式中的捕获组

答案 1 :(得分:2)

您可以使用re.sub()

>>> import re
>>> s = "Lorem ipsum [!one] and [!two]"
>>> re.sub(r"\[\!(\w+)\]", r'[\1](http://example.com/\1)', s)
'Lorem ipsum [one](http://example.com/one) and [two](http://example.com/two)'

\1是已捕获群组(\w+)的参考。

另请参阅有关捕获群组的documentation