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

sel*_*bie 2 python string-parsing python-3.x

使用Python 3.

我有一个字符串,例如128kb/s,5mb/s或者作为简单的东西42!.数字字符及其后缀之间没有空格,所以我不能直接调用int(text).

我只是想捕捉的值128,542为整数.

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

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
Run Code Online (Sandbox Code Playgroud)

以上工作正常,但有更多的pythonic方式来做到这一点

Sha*_*ger 5

这是正则表达式似乎合理的场景之一:

 import re

 leadingdigits = re.compile(r'^\d+')

 def read_int_from_string(text):
     return int(leadingdigits.match(text).group(0))
Run Code Online (Sandbox Code Playgroud)

如果你讨厌正则表达式,你可以这样做基本上将原始循环的逻辑推送到C层,尽管它可能会更慢:

 from itertools import takewhile

 def read_int_from_string(text):
     return int(''.join(takewhile(str.isdigit, text)))
Run Code Online (Sandbox Code Playgroud)