我有一个包含以下键值对的字典: d={'Alice':'x','Bob':'y','Chloe':'z'}
我想用任何给定字符串中的常量(键)替换小写变量(值)。
例如,如果我的字符串是:
A(x)B(y)C(x,z)
如何替换字符以获得结果字符串:
A(爱丽丝)B(鲍勃)C(爱丽丝,克洛伊)
我应该使用正则表达式吗?
re.sub()具有替换功能的解决方案:
import re
d = {'Alice':'x','Bob':'y','Chloe':'z'}
flipped = dict(zip(d.values(), d.keys()))
s = 'A(x)B(y)C(x,z)'
result = re.sub(r'\([^()]+\)', lambda m: '({})'.format(','.join(flipped.get(k,'')
for k in m.group().strip('()').split(','))), s)
print(result)
Run Code Online (Sandbox Code Playgroud)
输出:
A(Alice)B(Bob)C(Alice,Chloe)
Run Code Online (Sandbox Code Playgroud)
扩大的视野:
import re
def repl(m):
val = m.group().strip('()')
d = {'Alice':'x','Bob':'y','Chloe':'z'}
flipped = dict(zip(d.values(), d.keys()))
if ',' in val:
return '({})'.format(','.join(flipped.get(k,'') for k in val.split(',')))
else:
return '({})'.format(flipped.get(val,''))
s = 'A(x)B(y)C(x,z)'
result = re.sub(r'\([^()]+\)', repl, s)
print(result)
Run Code Online (Sandbox Code Playgroud)
特定输入情况的奖励A(x)B(y)C(Alice,z)方法:
...
s = 'A(x)B(y)C(Alice,z)'
result = re.sub(r'\([^()]+\)', lambda m: '({})'.format(','.join(flipped.get(k,'') or k
for k in m.group().strip('()').split(','))), s)
print(result)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2350 次 |
| 最近记录: |