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

Ben*_*rts 7 python

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

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

jh3*_*314 16

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

int(''.join(c for c in s if c.isdigit()))
Run Code Online (Sandbox Code Playgroud)

  • 我希望 Python 支持 `(c for c in s while c.isdigit())`... (3认同)

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.

  • 在检查整个字符串之前它也会挽救(如果有一个数字和一百万个斜线......) (3认同)
  • * facepalm * Python的工作方式是向它们抛出正则表达式。 (2认同)
  • 您在这里不需要捕获组。您可以使用“ \ d +”和不带参数的.group()。 (2认同)

ars*_*jii 9

看起来像是一份工作itertools.takewhile:

>>> from itertools import takewhile
>>> s = '12//'
>>> int(''.join(takewhile(str.isdigit, s)))
12
Run Code Online (Sandbox Code Playgroud)


Jor*_*ley 5

这是一种很酷的技术,但如果它只是您描述的格式,那么它可能就太过分了:

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)

  • 您可以反转“允许”,而不是“潜在”,例如: `''.join(map(chr, range(256))).replace('0123456789', '')` (是一种方法) (2认同)