You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式捕获Bash中的整数与浮点数

解决方案

你之前修改的正则^[[:space:]]*([[:digit:].]+)[[:space:]]*([kmg])b?[[:space:]]*$存在明显缺陷:它会匹配包含多个小数点(比如23..78)或仅含小数点(比如..)的无效格式,不符合数值的规范要求。

要同时匹配整数和合法浮点数,需要限制小数点的出现次数,且确保数值整体至少包含一个有效数字。以下是两种适配不同场景的修正方案:

方案1:支持带前导小数点的浮点数(如.789 MB)

该方案覆盖整数、标准浮点数(如23.789)以及仅含小数部分的数值:

^[[:space:]]*([[:digit:]]*\.?[[:digit:]]+)[[:space:]]*([kmg])b?[[:space:]]*$
  • 捕获组1逻辑:[[:digit:]]*匹配0个或多个整数部分,\.?匹配0个或1个小数点,[[:digit:]]+确保至少有一组数字,避免纯小数点的无效情况。

方案2:仅支持整数和标准浮点数(如23或23.789,拒绝.789)

如果你的业务场景不需要前导小数点的数值,可使用更严格的版本:

^[[:space:]]*([[:digit:]]+(\.[[:digit:]]+)?)[[:space:]]*([kmg])b?[[:space:]]*$
  • 捕获组1逻辑:[[:digit:]]+匹配至少1个整数部分,(\.[[:digit:]]+)?匹配可选的小数点+小数部分,保证要么是纯整数,要么是带小数的标准格式。

验证效果

两种方案都能正确匹配以下合法输入:

  • 23 MB → 捕获数值23,单位M
  • 23.789 GB → 捕获数值23.789,单位G
  • 123 kB → 捕获数值123,单位k

同时会自动拒绝无效格式:

  • 23..78 MB → 不匹配
  • . MB → 不匹配
  • abc MB → 不匹配

如果需要支持单位大小写(比如MB或mb),可以把[kmg]修改为[kmgKMG],或者根据使用的正则引擎添加不区分大小写的修饰符。

内容的提问来源于stack exchange,提问作者Chandan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:15:49