当字符串包含数字+额外字符时,将字符串解析为int

时间:2013-07-26 18:10:12

标签: python

在Python中,我怎样才能/应该将具有数字的字符串,后跟其他字符解析为int?

我想解决的具体问题是解析包含数字的字符串中的第一个数字,后跟任意数量的其他字符,包括可能是其他数字,我不感兴趣。例如,如果字符串是"12//"我需要获得12

5 个答案:

答案 0 :(得分:14)

如果要提取字符串中的数字:

int(''.join(c for c in s if c.isdigit()))

答案 1 :(得分:10)

我会使用这个正则表达式:

import re
try:
    print int(re.compile("(\d+)").match('12//').group(1))
except:
    print "there was no number"

它将提取第一个非数字字符的所有数字和步长。

\d表示单个数字,\d+表示至少匹配一个数字,(\d+)表示将您在组1中找到的数字放在一起。

答案 2 :(得分:9)

看起来像itertools.takewhile的作业:

>>> from itertools import takewhile
>>> s = '12//'
>>> int(''.join(takewhile(str.isdigit, s)))
12

答案 3 :(得分:3)

这是一种很酷的技巧,但如果它只是你所描述的格式,它可能会有点过分:

import string
potential_bad_characters = string.ascii_puctuation + string.ascii_letters

int(my_string.translate(None,potential_bad_characters ))

#Or
int(mystring.rstrip(potential_bad_characters))

#Or
int(filter(str.isdigit,my_string))

#Or (kudos @JonClements)
potential_bad_characters = ''.join(map(chr, range(256))).replace('0123456789', '')
...

答案 4 :(得分:1)

与jh314s解决方案类似,但只在任何非数字字符之前取数字(因此34 // 98将变为34,而不是3498)。假设字符串是“s”:

nonDigitIdx = [idx for idx,ch in enumerate(s) if not ch.isdigit()][0]
i = int(s[:nonDigitIdx-1])