Python-类似于 php 中的 .format()
Python-like .format() in php
我有以下数组:
$matches[0] = "123";
$matches[1] = "987";
$matches[2] = "121";
以及以下字符串:
$result = "My phone number is {0} and police number is {2}";
我想根据 $matches
数组替换 {}
占位符,以防占位符不匹配时显示任何内容。
实现该目标的最佳方法是什么,或者您知道解决我的问题的更好方法吗?
(现在我正在构建系统,所以我可以使用任何其他符号代替大括号)
更新
在 python 中,可以使用 .format()
函数。
您可以使用 vsprintf
来完成,如果您像这样给出项目的编号(从 1 开始),则不必更改项目的顺序:%n$s
(其中 n是数字):
$matches = [ "123", "987", "121"];
$result = 'My phone number is %1$s and police number is %3$s';
$res = vsprintf($result, $matches);
请注意,您必须将格式化的字符串放在单引号之间,否则 $s
将被解释为变量并被替换为任何内容。
(vprintf
和 vsprintf
是为数组设计的,但是你可以用 printf
和 sprintf
为分隔变量做同样的事情,它的工作原理相同)
如果你不能改变你原来的Python格式化字符串,方法是使用preg_replace_callback
:
$matches = [ "123", "987", "121"];
$result = 'My phone number is {0} and police number is {2}';
$res = preg_replace_callback('~{(\d+)}~', function ($m) use ($matches) {
return isset($matches[$m[1]]) ? $matches[$m[1]] : $m[0];
}, $result);
或者您可以构建一个关联数组,其中键是占位符,值是您的数组值,并使用 strtr
进行替换:
$matches = [ "123", "987", "121"];
$result = 'My phone number is {0} and police number is {2}';
$trans = array_combine(
array_map(function ($i) { return '{'.$i.'}'; }, array_keys($matches)),
$matches
);
$result = strtr($result, $trans);
我有以下数组:
$matches[0] = "123";
$matches[1] = "987";
$matches[2] = "121";
以及以下字符串:
$result = "My phone number is {0} and police number is {2}";
我想根据 $matches
数组替换 {}
占位符,以防占位符不匹配时显示任何内容。
实现该目标的最佳方法是什么,或者您知道解决我的问题的更好方法吗?
(现在我正在构建系统,所以我可以使用任何其他符号代替大括号)
更新
在 python 中,可以使用 .format()
函数。
您可以使用 vsprintf
来完成,如果您像这样给出项目的编号(从 1 开始),则不必更改项目的顺序:%n$s
(其中 n是数字):
$matches = [ "123", "987", "121"];
$result = 'My phone number is %1$s and police number is %3$s';
$res = vsprintf($result, $matches);
请注意,您必须将格式化的字符串放在单引号之间,否则 $s
将被解释为变量并被替换为任何内容。
(vprintf
和 vsprintf
是为数组设计的,但是你可以用 printf
和 sprintf
为分隔变量做同样的事情,它的工作原理相同)
如果你不能改变你原来的Python格式化字符串,方法是使用preg_replace_callback
:
$matches = [ "123", "987", "121"];
$result = 'My phone number is {0} and police number is {2}';
$res = preg_replace_callback('~{(\d+)}~', function ($m) use ($matches) {
return isset($matches[$m[1]]) ? $matches[$m[1]] : $m[0];
}, $result);
或者您可以构建一个关联数组,其中键是占位符,值是您的数组值,并使用 strtr
进行替换:
$matches = [ "123", "987", "121"];
$result = 'My phone number is {0} and police number is {2}';
$trans = array_combine(
array_map(function ($i) { return '{'.$i.'}'; }, array_keys($matches)),
$matches
);
$result = strtr($result, $trans);