Python中如何提取数值前两位数字?含版本号提取需求
问题一:如何在Python中提取数值的前两位数字?
这是个挺常见的需求,分几种场景给你整理了实用的解决方案:
转字符串处理(最直观,适配整数/浮点数/负数)
把数值转成字符串后截取前两位,注意先处理负数的负号避免干扰:def get_first_two_digits(num): num_str = str(abs(num)) # 取绝对值去掉负号 if len(num_str) >= 2: return int(num_str[:2]) return num # 数值不足两位时返回原数,你也可以根据需求改成返回0或者其他值 # 测试示例 print(get_first_two_digits(1234)) # 输出 12 print(get_first_two_digits(56.78)) # 输出 56 print(get_first_two_digits(-987)) # 输出 98 print(get_first_two_digits(7)) # 输出 7数学计算法(适合整数,无需转字符串)
通过不断整除10,把数值缩小到两位数范围:def get_first_two_digits_math(num): num = abs(num) while num >= 100: num = num // 10 return num # 测试示例 print(get_first_two_digits_math(456)) # 输出 45 print(get_first_two_digits_math(78)) # 输出 78 print(get_first_two_digits_math(-123)) # 输出 12
问题二:提取主版本号和次版本号(如从1.1.73.4得到1.1)
看了你现有的代码,已经完成了核心的版本号匹配工作,只需要对结果做一步处理就能拿到主+次版本号,给你几个简洁的实现方法:
方法一:分割字符串取前两段
利用版本号的点分隔特性,把完整版本号拆分成列表后取前两个元素再拼接:
import re import json for version in issue["fields"]["fixVersions"]: # 这里可以简化:不用先dumps再loads,version本身就是字典 jsonToPython = version if jsonToPython['name'][:8] == "Ciagana ": matches = re.findall(r"\d+\.\d+\.\d+\.\d+", jsonToPython['name']) if matches: # 加个判断防止没匹配到版本号时报错 full_version = matches[0] main_sub_version = '.'.join(full_version.split('.')[:2]) print(main_sub_version) # 输出 1.1 这样的结果
方法二:修改正则直接匹配目标
可以直接写正则表达式只捕获主版本和次版本,省去后续分割步骤:
import re import json for version in issue["fields"]["fixVersions"]: jsonToPython = version if jsonToPython['name'][:8] == "Ciagana ": # 正则捕获前两段数字,后面跟着两段数字的结构 match_result = re.search(r"(\d+\.\d+)\.\d+\.\d+", jsonToPython['name']) if match_result: print(match_result.group(1)) # 直接得到 1.1
小优化建议
- 你的代码里
json.dumps(version)再json.loads(cacheData)完全是多余的,version本身就是从issue["fields"]["fixVersions"]里取的字典,直接赋值给jsonToPython就行,能让代码更简洁高效。 - 一定要加上匹配结果的判断(
if matches:或if match_result:),避免遇到没有版本号的情况时抛出IndexError或者AttributeError,让代码更健壮。
内容的提问来源于stack exchange,提问作者unknown
相关产品推荐
相关产品推荐

