You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python正则表达式提取软件版本并排序

问题解决:从混合字符串中提取并排序软件版本号

1. 为啥你之前的正则没用?

你写的r'[0-9, ]'是字符类匹配,它只会匹配单个数字、逗号或者空格,自然只能拿到第一个符合条件的字符"2",完全达不到提取完整版本号的目的。

2. 正确的正则怎么写?

我们要匹配的版本号是:以数字开头,后面可能跟着字母加数字(比如2022r2),而且是被逗号(可能带前后空格)分隔的独立项。合适的正则是:

\b\d+(?:[a-zA-Z]\d+)?\b
  • \b:单词边界,确保我们抓的是独立的版本项,不会把路径里path_2021中的2021误提出来
  • \d+:匹配一个或多个数字(版本的年份核心部分)
  • (?:[a-zA-Z]\d+)?:非捕获组,可选匹配字母加数字(比如r2),?表示这部分可有可无

3. 完整提取+排序代码(Python)

直接上可运行的代码,处理你的输入字符串:

import re

input_str = "2018, \\some\\directory\\is\\here, \\some\\directory\\is\\here,  2019, \\here\\is\\another\\directory, \\here\\is\\another\\directory,  2021, \\here\\is\\another\\path_2021,   2020, http://some.will/even/look/like/this,   2022r2,   2023"

# 提取所有符合规则的版本号
versions = re.findall(r'\b\d+(?:[a-zA-Z]\d+)?\b', input_str)

# 自定义排序规则:先按数字部分排序,再处理后缀
def version_sort_key(ver):
    # 拆分数字主体和后缀
    num_part = re.match(r'\d+', ver).group()
    suffix = ver[len(num_part):]
    return (int(num_part), suffix)

# 排序并输出
sorted_versions = sorted(versions, key=version_sort_key)
print(', '.join(sorted_versions))

运行后输出就是你要的:2018, 2019, 2020, 2021, 2022r2, 2023

4. 额外说明

  • \b是关键,能避免误抓路径、网址里嵌入的数字(比如path_2021里的2021不会被提取)
  • 自定义排序键保证了像2022r2这种带后缀的版本能排在正确的位置
  • 如果你的版本后缀有更复杂的格式(比如2022sp3),只需要微调正则和排序规则,核心思路还是拆分数字主体和后缀部分

内容的提问来源于stack exchange,提问作者Acuity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:40:44