获取字符串中数值列表的最简洁方法是什么?
例如:
string = 'version_4.11.2-2-1.4'
array = [4, 11, 2, 2, 1, 4]
Run Code Online (Sandbox Code Playgroud)
您可能理解,我需要比较版本.
"最干净",我的意思是尽可能简单/简短/可读.
另外,如果可能的话,我更喜欢内置函数而不是regexp(import re).
这是我到目前为止所得到的,但我觉得它很笨拙:
array = [int(n) for n in ''.join(c if c.isdigit() else ' ' for c in string).split()]
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我无法在SO上找到答案:
谢谢
只需匹配连续数字:
map(int, re.findall(r'\d+', versionstring))
Run Code Online (Sandbox Code Playgroud)
数字之间的关系并不重要; \d+匹配可以连续找到的数字.这为Python 2提供了所需的输出:
>>> import re
>>> versionstring = 'version_4.11.2-2-1.4'
>>> map(int, re.findall(r'\d+', versionstring))
[4, 11, 2, 2, 1, 4]
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Python 3,map()则为您提供一个可迭代map对象,因此要么调用list()它,要么使用列表推导:
[int(d) for d in re.findall(r'\d+', versionstring)]
Run Code Online (Sandbox Code Playgroud)
我也用正则表达式来解决这个问题.
我喜欢re.finditer过re.findall这个任务.re.findall返回一个列表,re.finditer返回一个迭代器,所以使用这个解决方案你不会创建一个临时的字符串列表:
>>> [int(x.group()) for x in re.finditer('\d+', string)]
[4, 11, 2, 2, 1, 4]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |