如何用正则匹配非浮点数/整数内容作为Split方法的分隔符?
解决正则匹配非合法数字作为分隔符的问题
首先,先明确覆盖常见情况的合法整数/浮点数正则(修正你给出的表达式,避免遗漏合法格式):-?(?:\d+\.?\d*|\.\d+)
这个正则能匹配:
- 整数:
123、-456 - 带完整小数的浮点数:
123.45、-67.89 - 仅小数部分:
.45、-.67 - 整数加小数点:
123.、-456.
要找到所有不符合该规则的内容作为Split的分隔符,你可以利用正向否定预查 (?!...) 排除合法数字的情况,对应的分隔符正则为:(?:(?!-?(?:\d+\.?\d*|\.\d+)).)+
示例(以JavaScript为例)
const inputStr = "foo123.45bar-67.baz.89qux-10."; // 按非合法数字分割,过滤空字符串 const validNumbers = inputStr.split(/(?:(?!-?(?:\d+\.?\d*|\.\d+)).)+/).filter(Boolean); console.log(validNumbers); // 输出: ["123.45", "-67.", ".89", "-10."]
正则解释
(?!-?(?:\d+\.?\d*|\.\d+)):正向否定预查,确保当前位置后续字符无法组成合法数字.:匹配任意单个字符(若需匹配换行符,需开启正则单行模式)(?:...)+:组合规则,匹配一段连续的非合法数字字符
如果你的合法数字规则有特殊限制(比如不允许123.或.45这类格式),只需修改预查中的合法数字正则即可。
内容的提问来源于stack exchange,提问作者Zbigniew Cebularz
相关产品推荐
相关产品推荐

