使用Python 3.
我有一个字符串,例如128kb/s
,5mb/s
,或者像42!
这样简单的字符串。数字字符及其后缀之间没有空格,因此我无法直接调用int(text)
。
我只想将128
,5
和42
的值捕获为整数。
目前,我刚刚编写了一个辅助函数,它将所有数字累加到一个字符串中,并打破第一个非数字字符。
def read_int_from_string(text):
s = ""
val = 0
for c in text:
if (c >= '0') and (c <= '9'):
s += c
else:
break
if s:
val = int(s)
return val
以上工作正常,但有更多的pythonic方法吗?
答案 0 :(得分:5)
这是正则表达式似乎合理的场景之一:
import re
leadingdigits = re.compile(r'^\d+')
def read_int_from_string(text):
return int(leadingdigits.match(text).group(0))
如果你讨厌正则表达式,你可以这样做基本上把你原来的循环逻辑推到C层,虽然它可能会慢一些:
from itertools import takewhile
def read_int_from_string(text):
return int(''.join(takewhile(str.isdigit, text)))
答案 1 :(得分:3)
你可以使用str.isdigit,这个怎么样?
>> int(filter(str.isdigit, '128kb/s'))
128
for Python 3.因为过滤器在Python 3中返回可迭代
int(''.join(filter(str.isdigit, '128kb/s')))