获取字符串数字前缀的最简洁方法

bar*_*nos 25 python string python-2.7 python-3.x

在Python中获取字符串数字前缀的最简洁方法是什么?

通过"干净"我的意思是简单,简短,可读.我不太关心性能,我认为无论如何它在Python中几乎不可测量.

例如:

给定字符串'123abc456def',获取字符串的最简洁方法是什么'123'

以下代码获得'123456':

input = '123abc456def'
output = ''.join(c for c in input if c in '0123456789')
Run Code Online (Sandbox Code Playgroud)

所以我基本上想找到一些方法来替换ifa while.

Kas*_*mvd 56

您可以使用itertools.takewhile哪个将迭代您的字符串(可迭代参数),直到它遇到返回的第一个项目False(通过传递给预测函数):

>>> from itertools import takewhile
>>> input = '123abc456def'
>>> ''.join(takewhile(str.isdigit, input))
'123'
Run Code Online (Sandbox Code Playgroud)


Tal*_*sar 13

这是从字符串中提取数字列表的最简单方法:

>>> import re
>>> input = '123abc456def'
>>> re.findall('\d+', s)
['123','456']
Run Code Online (Sandbox Code Playgroud)

如果您需要int的列表,那么您可以使用以下代码:

   >>> map(int, re.findall('\d+', input ))
   [123,456]
Run Code Online (Sandbox Code Playgroud)

现在您可以从上面的列表中访问第一个元素[0]

  • 也许`match()`更合适,因为OP只需要起始数字. (10认同)

dem*_*hog 5

更简单的版本(留下另一个答案,因为关于哪种方法更好有一些有趣的争论)

input[:-len(input.lstrip("0123456789"))]
Run Code Online (Sandbox Code Playgroud)