Заменить несколько символов в строке - PullRequest
3 голосов
/ 21 марта 2019

Есть ли в python простой способ заменить несколько символов на другие?

Например, я хотел бы изменить:

name1_22:3-3(+):Pos_bos 

до

name1_22_3-3_+__Pos_bos

Так что в основном замените все "(",")",":" на "_".

Я знаю, что делать это только с:

str.replace(":","_")
str.replace(")","_")
str.replace("(","_")

Ответы [ 4 ]

7 голосов
/ 21 марта 2019

Вы можете использовать re.sub для замены нескольких символов одним шаблоном:

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

Выход

'name1_22_3-3_+__Pos_bos '
5 голосов
/ 21 марта 2019

Используйте таблицу перевода. В Python 2 maketrans определяется в модуле string.

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

В Python 3 это метод класса str.

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

В обоих случаях таблица передается в качестве аргумента str.translate.

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

В Python 3 вы также можете передать один dict сопоставление входных символов для вывода символов в maketrans:

table = str.maketrans({"(": "_", ")": "_", ":": "_"})
2 голосов
/ 21 марта 2019

Придерживаясь вашего текущего подхода использования replace():

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

OUTPUT

name1_22_3-3_+___Pos_bos

РЕДАКТИРОВАТЬ : (для удобства чтения)

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)
1 голос
/ 21 марта 2019

Другая возможность - это использование так называемого понимания списка в сочетании с так называемым троичным условным оператором следующим образом:

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

Поскольку он дает list, я использую ''.join, чтобы изменить list символов (str с длиной 1) в str.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...