为何Perl正则表达式无法识别-0.00值?求原因及解决方案
问题分析与解决
失败原因
你写的正则表达式存在两处关键逻辑错误:
\d[0]写法错误:\d匹配任意单个数字,[0]匹配单个0,组合后是匹配任意数字后紧跟一个0,但目标字符串-0.00中,减号后只有一个0,没有额外的0跟随,这部分直接不匹配。\d[0]+写法错误:\d匹配任意数字,[0]+匹配一个或多个0,组合后是任意数字后紧跟一个或多个0,但我们需要的是小数点后全为0,不需要前面的\d,这部分完全偏离需求。
可行解决方案
要匹配以负号开头、整数部分为0、小数部分全是0(至少一个0)的数值,提供两种方案:
方案1:匹配标准格式(如-0.00)
data master; input val$ ; match = prxmatch('m/^-0\.0+$/o', strip(val)); datalines; -0.00 -0.05 0.00 ; run;
正则拆解:
^-:匹配字符串开头的负号0\.:匹配整数部分的0和小数点0+$:匹配一个或多个0,直到字符串结尾,确保没有多余字符
方案2:兼容整数部分多0的场景(如-00.000)
如果需要支持整数部分有多个0的情况,调整正则如下:
data master; input val$ ; match = prxmatch('m/^-0+\.0+$/o', strip(val)); datalines; -0.00 -00.000 -0.05 0.00 ; run;
正则拆解:
0+:匹配一个或多个0,覆盖整数部分多0的情况
内容的提问来源于stack exchange,提问作者jkatam
相关产品推荐
相关产品推荐

