Regex需求:从字符串中提取指定格式版本号(去除冗余后缀)
正则提取特定版本号解决方案
需求
从以下字符串中提取X.XRX-EVO格式的目标版本:
21.4R3.13-EVO -- Required 21.4R3-EVO
24.1R13.13-EVO -- Required 24.1R13-EVO
21.4R2-S1-20190223000107.0-EVO -- Required 21.4R2-EVO
19.4R11-S1-20190223000107.0-EVO -- Required 19.4R11-EVO
需忽略核心版本(如21.4R3)与-EVO之间的所有冗余内容(如.13、-S1-20190223000107.0)。
问题诊断
你之前使用的正则[0-9]+.[0-9]+[A-Z][0-9]+仅匹配了核心版本前缀,没有关联末尾的-EVO,也未处理中间冗余内容。
解决方案
捕获组拼接方案
^(\d+\.\d+R\d+).*(-EVO)$
- 各部分解释:
^:锚定字符串开头,避免匹配字符串中间的无关片段(\d+\.\d+R\d+):捕获核心版本段(如21.4R3、24.1R13)\d+:匹配1个及以上数字\.:匹配点号(必须转义,避免正则中.匹配任意字符的默认行为)R:匹配固定大写字母R
.*:匹配中间所有冗余内容(任意字符任意长度)(-EVO)$:捕获末尾的-EVO,锚定字符串结尾
- 使用方式:将捕获组1和组2拼接(如
\1\2或$1$2,具体取决于使用的工具),即可得到目标结果。
替换式解决方案(更高效)
如果使用替换操作,可直接删除冗余部分:
- 匹配正则:
(\d+\.\d+R\d+).*(-EVO) - 替换为:
$1$2
执行替换后,原始字符串会直接转换为目标版本号。
直接匹配核心前缀方案
若只需提取核心前缀再手动拼接-EVO,可使用:
\d+\.\d+R\d+(?=.*-EVO)
这个正则会匹配所有后面跟着-EVO的核心版本段,提取后拼接-EVO即可得到完整目标。
测试验证
用上述正则处理示例字符串,均可得到符合要求的结果:
21.4R3.13-EVO→21.4R3-EVO21.4R2-S1-20190223000107.0-EVO→21.4R2-EVO
内容的提问来源于stack exchange,提问作者Knightfox
相关产品推荐
相关产品推荐

