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

Pythonic way to parse a number out of a string that has a postfix

使用Python 3.

我有一个字符串,例如 128kb/s5mb/s,或者像 42! 这样简单的字符串。数字字符和它的后缀之间没有 space,所以我不能直接调用 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的方法来做到这一点

你可以用str.isdigit,这个怎么样?

>> int(filter(str.isdigit, '128kb/s'))
   128

for Python 3. 因为过滤器 returns 在 Python 3

中可迭代
int(''.join(filter(str.isdigit, '128kb/s')))

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

 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)))