使用Python中的正则表达式替换单词周围的括号

2 投票
2 回答
679 浏览
提问于 2025-04-18 00:20

我有这段文字:

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 个回答

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+) 的引用。

你还可以查看 文档,了解捕获组的相关内容。

4

你可以使用 re.sub() 来实现这个目的。

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

\\1 是从正则表达式匹配到的 ([^]]+) 中捕获的部分。

撰写回答