带可选符号数值匹配正则优化:解决范围误匹配及可选空格问题
正则表达式:匹配带可选正负号的数值并排除范围值
要解决这个问题,核心是区分数值的正负号和范围连接符(减号)——当减号前是数字(无论中间是否有空格)时,它是范围符,不能作为后续数字的负号。
最终正则表达式
(?:(?<!\d\s*)[+-]\s*)?\d+
正则解释
(?<!\d\s*):负后向断言,确保正负号[+-]的前面**不是“数字+任意数量空格”**的组合,直接排除范围符的情况。[+-]\s*:匹配可选的正负号,符号与数字之间允许有任意数量空格(比如- 20这类格式也能正常匹配)。?:表示正负号部分是可选的,支持不带符号的纯数字。\d+:匹配一个或多个连续数字。
测试案例验证
foo -20→ 匹配-20✔️0 - 20→ 匹配0、20✔️foobar, 2-20→ 匹配2、20✔️bar, 2 - 20→ 匹配2、20✔️+20→ 匹配+20✔️-20→ 匹配-20✔️foo bar,-20,foo→ 匹配-20✔️
内容的提问来源于stack exchange,提问作者otbear
相关产品推荐
相关产品推荐

