gpt4 book ai didi

python - 从Python中的不同字符串中提取模式

转载 作者:行者123 更新时间:2023-12-01 04:00:02 25 4
gpt4 key购买 nike

我的文件名很少:

xyz-1.23.35.10.2.rpm

xyz-linux-version-90.12.13.689.tar.gz

xyz-xyz-xyz-13.23.789.0-xyz-xyz.rpm

这里 xyz 可以是任何大小的任何字符串(只有字母,没有数字)

这里带('.')的数字是每个文件的版本。

我可以使用一个通用函数来从每个文件名中提取版本吗?我尝试过,但函数变得太大并且大量使用硬编码常量。请建议一个简单的方法

最佳答案

我们可以使用re模块来做到这一点。让我们定义我们要匹配的模式。

我们需要匹配一串数字:

\d+

这些数字后面可以跟一个句点或连字符:

\d+[\-\.]?

这个模式可以重复很多次:

(\d[\-\.]?)*

最后,我们始终以至少一位数字结尾:

(\d+[\-\.]?)*\d+

此模式可用于定义从文件名返回版本号的函数:

import re

def version_from(filename, pattern=r'(\d+[\-\.]?)*\d+'):
match = re.search(pattern, filename)
if match:
return match.group(0)
else:
return None

现在我们可以使用该函数从您提供的数据中提取所有版本:

data = ['xyz-1.23.35.10.2.rpm', 'xyz-linux-version-90-12-13-689.tar.gz', 'xyz-xyz-xyz-13.23.789.0-xyz-xyz.rpm']

versions = [version_from(filename) for filename in data]

结果是您要求的列表:

['1.23.35.10.2', '90-12-13-689', '13.23.789.0']

关于python - 从Python中的不同字符串中提取模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36730802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com