在Python中,我如何/应该将具有数字的字符串,后跟其他字符解析为int?
我试图解决的具体问题是解析包含数字的字符串中的第一个数字,后跟任意数量的其他字符,包括可能是其他数字,我不感兴趣.例如,如果字符串是"12//" I需要得到的12.
jh3*_*314 16
如果要提取字符串中的数字:
int(''.join(c for c in s if c.isdigit()))
Run Code Online (Sandbox Code Playgroud)
nio*_*nio 10
我会使用这个正则表达式:
import re
try:
print int(re.compile("(\d+)").match('12//').group(1))
except:
print "there was no number"
Run Code Online (Sandbox Code Playgroud)
它将提取第一个非数字字符的所有数字和跳数.
\d表示单个数字,\d+表示匹配至少一个数字,(\d+)并且表示将您在组中找到的内容放在一起1.
看起来像是一份工作itertools.takewhile:
>>> from itertools import takewhile
>>> s = '12//'
>>> int(''.join(takewhile(str.isdigit, s)))
12
Run Code Online (Sandbox Code Playgroud)
这是一种很酷的技术,但如果它只是您描述的格式,那么它可能就太过分了:
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', '')
...
Run Code Online (Sandbox Code Playgroud)