2009-02-17 24 views

回答

33

做字符转换(有点像tr命令)查看string.translate

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

注意一下文件的有关微妙之处评论在unicode字符串的翻译中。

编辑:由于tr是一个更先进的,也可以考虑使用re.sub

+3

对于python3,“module”对象没有属性“maketrans”。直接使用`“abc”.translate(str.maketrans(“abc”,“def”))`! – SparkAndShine 2015-07-18 23:58:47

17

如果你使用python3转化为更简洁:

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

啊...而且也等同于tr -d

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

对于tr -d与python2.x使用一个额外的参数翻译功能:

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

是否有`tr -cd`的等价物? – Sundeep 2016-06-27 08:50:59

-4

更简单的方法可能是给我们e取代。例如

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

无需导入任何东西。在Python 2.x中工作

+5

它也可以在Python 3中工作,但不会执行OP要求的操作。 – iruvar 2013-10-03 18:02:08

+1

翻译`cb`到`wt`应该将`cabbage`转换成`wattage` – Jasen 2015-09-25 01:14:28

1

在Python 2中,unicode.translate()接受普通映射,即。有没有必要导入任何两种:

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

translate()方法是交换字符(如“+”和“ - ”以上)特别有用,它不能与replace()来完成,并使用re.sub() ISN”为此目的也非常简单。

但是我不得不承认,但是,重复使用ord()并不会使代码看起来很漂亮整齐。

4

我开发了python-tr,实现了tr算法。 让我们试试吧。

安装:

$ pip install python-tr 

实施例:

>>> 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

这一个工作的Python 3

-int('(1200)'.translate(str.maketrans('','','()')))