使用正则表达式在字符串中搜索并替换为 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)
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)