Pythonic方法来删除字符串中的字符

spr*_*ssd 2 python string

从字符串中删除不同字符的巧妙方法是什么?例如,我有以下字符串需要转换为整数:

($12,990)
$21,434
Run Code Online (Sandbox Code Playgroud)

我使用以下代码工作正常,但有没有更笨重的方法来做同样的事情?

string = string.replace(",", "")
string = string.replace("$", "")
string = string.replace("(", "-")
string = string.replace(")", "")
int(string)
Run Code Online (Sandbox Code Playgroud)

编辑:我使用的是 Python 2.7。

MSe*_*ert 7

你可以使用str.translate,例如

>>> "($12,990)".translate(str.maketrans({',': '', '$': '', '(': '-', ')': ''}))
'-12990'
Run Code Online (Sandbox Code Playgroud)

正如@AdamSmith 在评论中所述,您还可以使用 的(完整)三参数形式str.maketrans:

>>> translationtable = str.maketrans("(", "-", ",$)")
>>> "($12,990)".translate(translationtable)
'-12990'
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 python-2.x,则可以使用str.translate函数和string.maketrans函数:

>>> import string
>>> translationtable = string.maketrans('(', '-')
>>> "($12,990)".translate(translationtable, ',$)')
'-12990'
Run Code Online (Sandbox Code Playgroud)

或者使用 Python-2.x 上的 unicodes,您需要一个 unicode-ordinal 到 unicode-ordinal/string 或 None:

>>> unicode_translation_table = {ord(u','): None, ord(u'$'): None, ord(u'('): ord(u'-'), ord(u')'): None}
>>> u"($12,990)".translate(unicode_translation_table)
u'-12990'
Run Code Online (Sandbox Code Playgroud)