使用正则表达式在字符串中搜索并替换为 python 中列表中的值

Search in string and replace with a value from a list in python using regex

my_string = """"
Hello [placeholder],

I would [placeholder] to work with you. I need your [placeholder] to complete my project.

Regards,
[placeholder]
"""

my_lst = ['John', 'like', 'help', 'Doe']

我想把list的这个值放到my_string.

因此,my_string 将是: """ 你好约翰, 我想和你一起工作。我需要你的帮助来完成我的项目。 问候, 母鹿“”

这里,[placeholder] 的数量和列表的长度是动态的。所以,我需要一个动态的解决方案。无论 [placeholder] 的数量和列表的长度如何,这都适用于任何字符串。我如何在 Python 中执行此操作?提前致谢。

使用正则表达式,您可以使用 re.sub 和 lambada 来 pop 列表中的项目

my_string = re.sub(r'\[(.*?)]', lambda x: my_lst.pop(0), my_string)

编辑评论有时 [placeholder] 的数量和列表的长度可能不相等。:

如果列表为空

,您可以在lambda中使用空字符串
my_string = re.sub(r'\[(.*?)]', lambda x: my_lst.pop(0) if my_lst else '', my_string)

最好使用 {} 而不是 [placeholder],因为它允许您将替换列表解压缩为默认值 str.format(),而无需任何其他修改。

my_string = """\
Hello {},

I would {} to work with you. I need your {} to complete my project.

Regards,
{}\
"""
my_lst = ['John', 'like', 'help', 'Doe']

my_string = my_string.format(*my_lst)

如果无法修改此“模板”,您可以使用 str.replace().

以编程方式进行修改
my_string = my_string.replace("[placeholder]", "{}").format(*my_lst)

如果 占位符 的数量可能大于 my_lst 的长度,您可以使用自定义格式化程序,它将 return 默认值。

from string import Formatter

class DefaultFormatter(Formatter):
    def __init__(self, default=""):
        self.default = default
    
    def get_value(self, key, args, kwargs):
        if isinstance(key, str) or key < len(args):
            return super().get_value(key, args, kwargs)
        else:
            return self.default

fmt = DefaultFormatter()
my_string = fmt.format(my_string.replace("[placeholder]", "{}"), *my_lst)