如何用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
相关产品推荐
相关产品推荐

