如何提取字符串中被空格包围的带符号浮点数?
提取字符串中被空格包围的带符号浮点数
问题场景
给定示例字符串:
str = ' area AMW1 = 93.3 m2 ';
需要从中仅提取被空格包围的带符号(可包含-)浮点数93.3。此前尝试的正则表达式\d+\.?\d*会错误匹配到AMW1里的1和m2里的2,无法满足需求。
可行解决方案
方案1:匹配被空格包裹的目标浮点数
使用带前后空格预查的正则表达式,精准锁定目标:
s = regexp(str,'(?<=\s)[-+]?\d+\.?\d*(?=\s)','match')
各部分含义:
(?<=\s):正向零宽断言,确保目标数前是空格[-+]?:匹配可选的正负符号(支持负数或正数的符号标注)\d+\.?\d*:覆盖常见浮点数格式,包括整数部分+可选小数点+可选小数部分(?=\s):正向零宽断言,确保目标数后是空格
执行后会得到仅包含93.3的结果数组。
方案2:结合=的位置精准定位
如果目标浮点数固定出现在=之后,可利用这个结构缩小匹配范围,直接捕获目标:
matches = regexp(str,'=\s*([-+]?\d+\.?\d*)','tokens'); target_num = matches{1}{1};
=\s*:匹配=及其后的任意空格([-+]?\d+\.?\d*):用捕获组提取目标浮点数,通过tokens参数直接获取捕获内容
这种方式能彻底避开字符串中其他无关数字的干扰。
内容的提问来源于stack exchange,提问作者Robert Seifert
相关产品推荐
相关产品推荐

