如何在正则表达式中添加条件语句实现字符串内容的精准提取
解决方案
你可以通过两种常用的正则写法实现需求:
写法1:结构匹配(兼容性最好,无环视依赖)
正则:(?<Myid>[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)
逻辑说明:
- 先匹配至少1个字母/数字
- 后续可匹配0组或多组「横杠+至少1个字母/数字」的组合
- 天然避免了开头/结尾出现横杠、以及连续横杠的问题,适用大多数编号匹配场景
写法2:原有正则基础上追加否定逆序环视(改动最小)
正则:(?<Myid>[a-zA-Z0-9-]+)(?<!-)
逻辑说明:
- 在你原有正则的基础上,追加
(?<!-)否定逆序环视规则,要求匹配结果的最后一位不能是横杠 - 仅过滤末尾横杠,不会限制中间出现连续横杠的场景,需要你的运行环境支持逆序环视(Java、Python 3+、JS ES2018+、.NET 等主流环境均支持)
匹配效果验证
- 针对
abc-def:两种写法均正常匹配abc-def,符合预期 - 针对
abc-:两种写法均仅匹配abc,自动忽略末尾横杠,符合需求
内容的提问来源于stack exchange,提问作者Shrivallabh
相关产品推荐
相关产品推荐

