如何一次进行多个替换?|python

2024-09-30 02:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

stringone = '0123456789 abcdefghijklmnopqrstuvwxys ABCDEFGHIJKLMNOPQRSTUVWXYS'

我需要做以下工作:

0 = s
1 = 6
2 = r
...
Z = F

但我需要马上做。我是说,不是

stringone.replace('0', 's')
stringone.replace('1', '6')

…不是那样,而是一行。比如说,我能做吗

stringone.replace('0', 's'; '1', '6')

我不知道怎么做。你能帮助我吗? Python 3.6.0


Tags: 字符串replacestringoneabcdefghijklmnopqrstuvwxys
3条回答

请尝试以下操作:

import re

def multireplace(string, sub_dict):

    substrings = sorted(sub_dict, key=len, reverse=True)
    regex = re.compile('|'.join(map(re.escape, substrings)))
    return regex.sub(lambda match: sub_dict[match.group(0)], string)

stringone = '0123456789 abcdefghijklmnopqrstuvwxys ABCDEFGHIJKLMNOPQRSTUVWXYS'

sub_dict = {"0": "s", "1": "6", "2":"r","Z":"F"}
output = multireplace(stringone, sub_dict)

让我们用字典来做:

dic = {'0':'s', '1':'6', '2':'r'....}

# either join
''.join(i if i not in dic else dic[i] for i in stringone)

# or re
import re
re.compile("|".join(dic.keys())).sub(lambda m: dic[re.escape(m.group(0))], stringone)

Join更简单,因为我们用值替换键

>>> stringone.translate({ord('0'): 's', ord('1'): '6'})
's623456789 abcdefghijklmnopqrstuvwxys ABCDEFGHIJKLMNOPQRSTUVWXYS'

相关问题 更多 >

    热门问题