python-3.x - 使用同一行中的文本替换多行字符串中的文本

标签 python-3.x

这是我想要完成的一个非常虚拟的示例,输入是文本:

{placeholder}, John Jones\n{placeholder}, Ben Franklin\n{placeholder}, George Washington

我想要做的是将 {placeholder} 的每个实例替换为使用同一行数据的函数的输出,例如名字的首字母和姓氏(需要将名字和姓氏输入到函数中)。

def initializer(name):
    return f"{name.split(' ')[0][0]}. {name.split(' ')[1]}"

期望的结果是:

J. Jones, John Jones\nB. Franklin, Ben Franklin\nG. Washington, George Washington

最佳答案

带有替换函数的正则表达式可以工作:

import re

s = "{placeholder}, John Jones\n{placeholder}, Ben Franklin\n{placeholder}, George Washington"

def repl_function(m):
    return "{}. {}, {} {}".format(m.group(1)[0],m.group(2),m.group(1),m.group(2))

print(re.sub("\{placeholder},\s+(.*?)\s(.*)",repl_function,s))

打印:

J. Jones, John Jones
B. Franklin, Ben Franklin
G. Washington, George Washington

它是如何工作的?

它捕获 {placeholder} 和 2 个单词(直到行尾,与 .* 不匹配,因为未设置 re.DOTALL并创建 2 个组(2 个名称部分)。

匹配时,它使用匹配对象调用 repl_function 替换函数(re.sub 的第二个参数可以是字符串、字节对象或接受一个参数:匹配对象)。

只需通过缩短名字并重复其他信息,将重新格式化的匹配对象作为字符串返回(这也可以在 lambda 中完成,但作为真正的函数,它可能更具可读性)

关于python-3.x - 使用同一行中的文本替换多行字符串中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086885/

相关文章:

python-3.x - 使用 Python 进行多重切片分配

python - 我们如何访问列表中的多个字典?

python - 我可以使用 WordPress 来支持 PyPI 文档页面吗?

python - Python KeyError 中哪个键失败?

python - 如何在SQLAlchemy中实现优先级分组?

python - 用于安全的目的是什么?

python - 防止从空 FIFO 读取数据时发生阻塞

python - 包围图像所有黑色像素的最小角度矩形

python - 哈希表模拟

python - time.sleep在无限while循环内仅一部分代码