如何将字符串转换为整数并删除其中的每个字符。
例如:
S = "--r10-"
,我希望得到这个结果:S = 10
以下方法不起作用:
S = "--10-"
int(S)
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-"))
首先要删除所有非数字字符,可以像这样操作:
int(''.join(c for c in "abc123def456" if c.isdigit()))
你可以直接去掉 -
和 r
:
int("--r10-".strip('-r'))
使用正则表达式替换/w,将非单词字符替换为空字符串"",然后进行转换
我更喜欢Sven Marnach的答案,使用filter
和isdigit
,但如果你想的话也可以使用正则表达式:
>>> 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
这很简单,不需要导入任何包。
def _atoi(self, string):
i = 0
for c in string:
i += ord(c)
return i