Pythonic方法解析带有后缀的字符串中的数字

时间:2016-12-22 19:49:24

标签: python python-3.x string-parsing

使用Python 3.

我有一个字符串,例如128kb/s5mb/s,或者像42!这样简单的字符串。数字字符及其后缀之间没有空格,因此我无法直接调用int(text)

我只想将128542的值捕获为整数。

目前,我刚刚编写了一个辅助函数,它将所有数字累加到一个字符串中,并打破第一个非数字字符。

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方法吗

2 个答案:

答案 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')))