Replace multiple characters in a string

后端 未结 4 647
感情败类
感情败类 2020-12-18 11:59

Is there a simple way in python to replace multiples characters by another?

For instance, I would like to change:

name1_22:3-3(+):Pos_bos 


        
相关标签:
4条回答
  • 2020-12-18 12:45

    Use a translation table. In Python 2, maketrans is defined in the string module.

    >>> import string
    >>> table = string.maketrans("():", "___")
    

    In Python 3, it is a str class method.

    >>> table = str.maketrans("():", "___")
    

    In both, the table is passed as the argument to str.translate.

    >>> 'name1_22:3-3(+):Pos_bos'.translate(table)
    'name1_22_3-3_+__Pos_bos'
    

    In Python 3, you can also pass a single dict mapping input characters to output characters to maketrans:

    table = str.maketrans({"(": "_", ")": "_", ":": "_"})
    
    0 讨论(0)
  • 2020-12-18 12:50

    You could use re.sub to replace multiple characters with one pattern:

    import re
    s = 'name1_22:3-3(+):Pos_bos '
    re.sub(r'[():]', '_', s)
    

    Output

    'name1_22_3-3_+__Pos_bos '
    
    0 讨论(0)
  • 2020-12-18 12:53

    Another possibility is usage of so-called list comprehension combined with so-called ternary conditional operator following way:

    text = 'name1_22:3-3(+):Pos_bos '
    out = ''.join(['_' if i in ':)(' else i for i in text])
    print(out) #name1_22_3-3_+__Pos_bos
    

    As it gives list, I use ''.join to change list of characters (strs of length 1) into str.

    0 讨论(0)
  • 2020-12-18 12:53

    Sticking to your current approach of using replace():

    s =  "name1_22:3-3(+):Pos_bos"
    for e in ((":", "_"), ("(", "_"), (")", "__")):
        s = s.replace(*e)
    print(s)
    

    OUTPUT:

    name1_22_3-3_+___Pos_bos
    

    EDIT: (for readability)

    s =  "name1_22:3-3(+):Pos_bos"
    replaceList =  [(":", "_"), ("(", "_"), (")", "__")]
    
    for elem in replaceList:
        print(*elem)          # : _, ( _, ) __  (for each iteration)
        s = s.replace(*elem)
    print(s)
    

    OR

    repList = [':','(',')']   # list of all the chars to replace
    rChar = '_'               # the char to replace with
    for elem in repList:
        s = s.replace(elem, rChar)
    print(s)
    
    0 讨论(0)
提交回复
热议问题