2009-02-17 8 views

Odpowiedz

33

Zobacz string.translate

import string 
"abc".translate(string.maketrans("abc", "def")) # => "def" 

uwaga komentarzy doc chodzi o subtelności w tłumaczeniu łańcuchów unicode.

Edytuj: Od tr jest nieco bardziej zaawansowany, należy również rozważyć użycie re.sub.

+3

Dla python3 obiekt '' module 'nie ma atrybutu "maketrans''. Użyj '" abc ".translate (str.maketrans (" abc "," def "))' bezpośrednio! – SparkAndShine

17

Jeśli używasz python3 przetłumaczyć mniej gadatliwy:

>>> 'abc'.translate(str.maketrans('ac','xy')) 
'xby' 

Ahh .. i nie jest też odpowiednik tr -d:

>>> "abc".translate(str.maketrans('','','b')) 
'ac' 

Dla tr -d z python2.x użyć dodatkowego argumentu do tłumaczenia funkcji:

>>> "abc".translate(None, 'b') 
'ac' 
+0

czy istnieje odpowiednik dla 'tr -cd'? – Sundeep

-4

Prostsze podejście może być dla nas e zastąp. na przykład

"abc".replace("abc", "def") 
'def' 

Nie trzeba niczego importować. Działa w Pythonie 2.x

+5

działa również w Pythonie 3, ale nie robi tego, o co prosi OP. – iruvar

+1

tłumaczenie 'cb' na' wt' powinno przekształcić 'kapustę' na' wattage' – Jasen

1

W Pythonie 2, unicode.translate() przyjmuje zwykłe odwzorowania, tj. nie trzeba importować niczego albo:

>>> u'abc+-'.translate({ord('+'): u'-', ord('-'): u'+', ord('b'): None}) 
u'ac-+' 

Sposób translate() jest szczególnie przydatna do ciężkich znaków (jako „+” i „-” powyżej), które nie mogą być wykonane z replace() i używając re.sub() ISN” bardzo proste w tym celu.

Muszę jednak przyznać, że wielokrotne użycie ord() nie sprawia, że ​​kod wygląda ładnie i porządnie.

4

Opracowałem Pythona-tr, zaimplementowany algorytm tr. Spróbujmy.

Instalacja:

$ pip install python-tr 

przykład:

>>> from tr import tr 
>>> tr('bn', 'cr', 'bunny') 
'curry' 
>>> tr('n', '', 'bunny', 'd') 
'buy' 
>>> tr('n', 'u', 'bunny', 'c') 
'uunnu' 
>>> tr('n', '', 'bunny', 's') 
'buny' 
>>> tr('bn', '', 'bunny', 'cd') 
'bnn' 
>>> tr('bn', 'cr', 'bunny', 'cs') 
'brnnr' 
>>> tr('bn', 'cr', 'bunny', 'ds') 
'uy' 
-1

Ten działa Pythona 3

+0

Czym różni się to od [odpowiedź] Piotra Czapli (http://stackoverflow.com/a/1385542/369450)? – cpburnz

Powiązane problemy