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

hgqdbh6s  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(314)
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']

我想将列表的这个值放入我的\u字符串中。
所以,我的字符串是:“你好,约翰,我想和你一起工作。我需要你的帮助来完成我的项目。你好,多伊
在这里,[占位符]的数量和列表的长度将是动态的。所以,我需要一个动态的解决方案。这将适用于任何字符串,而不考虑[placeholder]的数量和列表的长度。如何在python中实现这一点?提前谢谢。

0lvr5msh

0lvr5msh1#

使用正则表达式,您可以使用 re.sub 还有兰巴达 pop 列表中的项目

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

有时编辑[占位符]的注解和列表长度可能不相等:
可以在中使用空字符串 lambda 如果列表为空

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

vmjh9lq92#

用它会更好 {} 而不是 [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 ,您可以使用将返回默认值的自定义格式化程序。

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)

相关问题