strings = ["1 asdf 2", "25etrth", "2234342 awefiasd"] #and so on


获得[1, 25, 2234342]的最简单方法是什么?

没有正则表达式模块或(^[0-9]+)这样的表达式怎么办?

最佳答案

可以编写一个辅助函数来提取前缀:

def numeric_prefix(s):
    n = 0
    for c in s:
        if not c.isdigit():
            return n
        else:
            n = n * 10 + int(c)
    return n


用法示例:

>>> strings = ["1asdf", "25etrth", "2234342 awefiasd"]
>>> [numeric_prefix(s) for s in strings]
[1, 25, 2234342]


请注意,如果输入字符串没有数字前缀(如空字符串),这将产生正确的输出(零)。

通过Mikel的解决方案,可以编写更简洁的numeric_prefix定义:

import itertools

def numeric_prefix(s):
    n = ''.join(itertools.takewhile(lambda c: c.isdigit(), s))
    return int(n) if n else 0

09-11 09:04