将字符串转换为整数

4

如何将字符串转换为整数并删除其中的每个字符。

例如:

S = "--r10-",我希望得到这个结果:S = 10

以下方法不起作用:

S = "--10-"
int(S)

我不确定你是否知道字符串的样子,但你总是可以使用正则表达式来获取相关信息。\d 可以给你数字。 - Daniel Wehner
6个回答

10
您可以使用filter(str.isdigit, s)来仅保留s中是数字的字符:
>>> s = "--10-"
>>> int(filter(str.isdigit, s))
10

请注意,这可能会导致包含多个数字的字符串产生意外的结果。

>>> int(filter(str.isdigit, "12 abc 34"))
1234

或者是负数

>>> int(filter(str.isdigit, "-10"))
10

编辑: 要使这适用于unicode对象而不是str对象,请使用

int(filter(unicode.isdigit, u"--10-"))

我在代码中遇到了这条信息:'descriptor 'isdigit' requres a 'str' object but recived a 'unicode' :( 有什么建议吗? - DRdr
3
你还可以使用operator.methodcaller("isdigit"),这样它就能处理str和unicode类型的数据。 - Andrew Clark

4

首先要删除所有非数字字符,可以像这样操作:

int(''.join(c for c in "abc123def456" if c.isdigit()))

1

你可以直接去掉 -r

int("--r10-".strip('-r'))

0

使用正则表达式替换/w,将非单词字符替换为空字符串"",然后进行转换


0

我更喜欢Sven Marnach的答案,使用filterisdigit,但如果你想的话也可以使用正则表达式:

>>> import re
>>> pat = re.compile(r'\d+')  #  '\d' means digit, '+' means one or more
>>> int(pat.search('--r10-').group(0))
10

如果字符串中有多个整数,它会提取第一个:

>>> int(pat.search('12 abc 34').group(0))
12

如果您需要处理负数,请使用此正则表达式:
>>> pat = re.compile(r'\-{0,1}\d+')  # '\-{0,1}' means zero or one dashes
>>> int(pat.search('negative: -8').group(0))
-8

0

这很简单,不需要导入任何包。

def _atoi(self, string):
    i = 0
    for c in string:
        i += ord(c)
    return i

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接