Python提取库名与带前缀版本号失败,咨询原字符串转换方法
解决方案
问题分析
你原来的代码出错原因在于:new_str处理后变成了something-try-composition-library version -0.29.2,后续用re.split('\\ version \\b', new_str)时,\b代表单词边界,但" version "后面跟着的是-(非单词字符),导致正则不匹配,split操作未生效,所以结果不符合预期。
简便实现方法
方法1:正则捕获分组(适配格式小变动,更可靠)
直接用正则匹配出库名和版本号,再拼接成目标格式:
import re mystr = "something-try-composition-library version v0.29.2" # 匹配库名和版本号的正则 pattern = r'^(.*?) version v(\d+\.\d+\.\d+)$' match_result = re.match(pattern, mystr) if match_result: library_name = match_result.group(1) version_str = f'-{match_result.group(2)}' final_output = [library_name, version_str] print(final_output) # 输出: ['something-try-composition-library', '-0.29.2']
方法2:字符串分割(格式固定时更简洁)
如果字符串格式完全固定(始终是"库名 version v版本号"),直接用指定分隔符分割即可:
mystr = "something-try-composition-library version v0.29.2" # 按固定分隔符分割 split_parts = mystr.split(" version v") final_output = [split_parts[0], f'-{split_parts[1]}'] print(final_output) # 输出符合预期
原代码修正(可选)
如果要基于你原来的思路调整,只需去掉正则中的\b:
import re mystr = "something-try-composition-library version v0.29.2" new_str = '-'.join(mystr.rsplit('v', 1)) final_str = re.split(' version ', new_str) print(final_str) # 输出符合预期
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

