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