通过正则表达式提取Minecraft服务器目标版本的技术需求
提取Minecraft服务器版本的正则解决方案
针对你遇到的Minecraft服务器版本字符串格式混乱的问题,我整理了一套正则表达式+简单逻辑的组合方案,完美匹配你给出的所有示例场景。
核心处理思路
我把所有场景分成两类针对性处理:
- 范围型版本(比如
1.8.x-1.12.x):优先提取范围右侧的版本号,自动去除末尾的非数字/点字符(比如x、.x这类后缀) - 单个版本:大部分情况保留完整版本号,仅对特定版本(
1.8.8、1.9.2)截断到主版本层级(比如1.8、1.9)
正则表达式
先用这个正则捕获所有可能的版本候选,它会优先匹配范围右侧的版本,再匹配单个版本:
(?:-(\d+\.\d+(?:\.\d+)?)\w*)|(\d+\.\d+(?:\.\d+)?)
完整实现代码(Python)
结合正则和简单逻辑判断,就能覆盖所有示例场景:
import re def extract_mc_version(version_str): # 正则规则:优先匹配范围右侧的版本,其次匹配单个独立版本 pattern = r'(?:-(\d+\.\d+(?:\.\d+)?)\w*)|(\d+\.\d+(?:\.\d+)?)' match_result = re.search(pattern, version_str) if match_result: # 先处理范围型版本的右侧值 if match_result.group(1): return match_result.group(1) # 处理单个版本的特殊截断情况 else: full_version = match_result.group(2) # 需要截断到主版本的特定版本列表 truncate_targets = {'1.8.8', '1.9.2'} if full_version in truncate_targets: return '.'.join(full_version.split('.')[:2]) else: return full_version # 无匹配时返回None(可根据需求调整默认值) return None # 测试所有示例场景 test_cases = [ ("BotFilter 1.8.x-1.12.x", "1.12"), ("BotFilter 1.8.x-1.12.x by hek.com Leymooo_s", "1.12"), ("Spigot 1.8.8", "1.8"), ("Spigot 1.8.9", "1.8.9"), ("BungeeCord 1.10-1.12x", "1.12"), ("Spigot 1.5.2", "1.5.2"), ("1.8.8 (Spigot)", "1.8"), ("1.9.2 Vanilla", "1.9"), ("CraftBukkit 1.7.2", "1.7.2"), ("BungeByGame 1.x-1.12.2", "1.12.2") ] # 验证结果 for input_str, expected_output in test_cases: result = extract_mc_version(input_str) status = "✅ 匹配成功" if result == expected_output else "❌ 匹配失败" print(f"输入: {input_str:45} → 输出: {result:8} | {status}")
规则细节解释
- 正则中的
(?:-(\d+\.\d+(?:\.\d+)?)\w*):专门匹配范围分隔符-后的版本内容,捕获数字+点的有效组合,自动忽略后面的x等无效后缀 (\d+\.\d+(?:\.\d+)?):匹配独立的版本号,支持两位(如1.8)或三位(如1.8.9)的标准版本格式- 代码中通过捕获组优先级判断,先处理范围版本,再对单个版本的特殊情况做截断,确保所有示例都能精准匹配
内容的提问来源于stack exchange,提问作者Jadasdas
相关产品推荐
相关产品推荐

