正则表达式优化需求:排除目标内容后的所有字符
正则表达式调整方案
问题核心
需要让正则仅捕获到-后面的4位数字(如3298)为止,忽略该位置之后的所有内容,同时兼容末尾有无额外内容的两类测试条目。
修改后的正则表达式
推荐两种实现方式,任选其一即可:
方式1:使用非捕获组匹配可选后续内容
.*\\\\(.*_[^-]+-[0-9]{4})(?:-.*)?
.*\\\\:匹配路径中最后一个反斜杠之前的所有内容(.*_[^-]+-[0-9]{4}):核心捕获组,精准匹配到-+4位数字的位置,确保后续内容不被纳入捕获结果(?:-.*)?:非捕获组,匹配可能存在的-及后续内容但不捕获,?保证该部分可选(兼容末尾无额外内容的情况)
方式2:使用正向预查限制匹配边界
.*\\\\(.*-[0-9]{4})(?=-|$)
.*\\\\:同方式1,匹配到最后一个反斜杠(.*-[0-9]{4}):捕获到-+4位数字的核心内容(?=-|$):正向预查断言,确保4位数字后面要么是-,要么是字符串结尾,从边界上限制匹配范围,避免包含后续内容
测试验证
- 对
Parkman\\L9\\B137598_00_T-3298-B,捕获组结果为B137598_00_T-3298 - 对
Parkman\\L9\\B137598_00_T-3298,捕获组结果为B137598_00_T-3298 - 对
Parkman\\L9\\B137598_00_T-3298-5555,捕获组结果仍为B137598_00_T-3298
内容的提问来源于stack exchange,提问作者Selim Ben Ammar
相关产品推荐
相关产品推荐

