Gho*_*ica 11 python python-3.x
我必须将包含占位符的字符串用于以后的替换,例如:
"A %s B %s"
Run Code Online (Sandbox Code Playgroud)
并将其转换为:
"A {0} B {1}"
Run Code Online (Sandbox Code Playgroud)
我想出了:
def _fix_substitution_parms(raw_message):
rv = raw_message
counter = 0
while '%s' in rv:
rv = rv.replace('%s', '{' + str(counter) + '}', 1)
counter = counter + 1
return rv
Run Code Online (Sandbox Code Playgroud)
那行得通,但是感觉超级笨拙,根本不是“惯用的” python。
良好的惯用python解决方案会是什么样子?
更新说明:
{}还不够好)!%s字符串,因为保证消息仅使用%s(什么也%i %f没有)re.sub与lambda函数一起使用,可以为每个元素重新应用一次替换,并itertools.count依次获取数字:
import itertools
import re
s = "A %s B %s"
counter = itertools.count()
result = re.sub('%s', lambda x: f'{{{next(counter)}}}', s)
print(result) # 'A {0} B {1}'
Run Code Online (Sandbox Code Playgroud)
请记住将其包装在一个函数中以多次执行此操作,因为您需要刷新itertools.count。
我会按照Reznik 最初的建议去做,然后呼吁.format:
def _fix_substitution_parms(raw_message: str) -> str:
num_to_replace = raw_message.count("%s")
python_format_string_message = raw_message.replace("%s", "{{{}}}")
final_message = python_format_string_message.format(*range(num_to_replace))
return final_message
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
310 次 |
| 最近记录: |