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

优化十进制与十六进制数字捕获正则表达式的问题

正则表达式调整方案

问题根源

  1. 单词边界\b的干扰:\b仅在单词字符(字母、数字、下划线)与非单词字符的边界生效。对于-25,负号-是非单词字符,数字2是单词字符,\b会落在-和2之间,导致原正则中\b(-|\.)?的逻辑无法匹配开头的负号;同理,.375的小数点也因\b的位置问题无法被正确关联。
  2. 十进制数字结构缺陷:原正则中[0-9]+是必填项,导致.375这种无前缀整数的小数无法匹配,自然捕获不到小数点。

调整后的正则表达式

(?<!\w)(?:(?:[[:xdigit:]]{2}(?:\s)?)+|(?:-)?(?:\d+\.?\d*|\.?\d+)(?:x[[:xdigit:]]+)?)(?!\w)

关键调整点

  • 替换单词边界:用(?<!\w)(前向否定断言,确保前面不是单词字符)和(?!\w)(后向否定断言,确保后面不是单词字符)替代\b,解决符号与数字的边界匹配问题,同时避免误匹配单词内部的数字片段。
  • 重构十进制数字逻辑:(?:-)?(?:\d+\.?\d*|\.?\d+)覆盖所有合法十进制格式:
    • 整数:25、-25
    • 常规小数:25.375、-25.375
    • 无前缀小数:.375、-.375
      同时确保不会单独匹配-或.(必须包含至少一个数字)。
  • 保留原有十六进制分组逻辑:继续支持AA BB CC这类两位分组带空格的十六进制格式,同时保留原有的(?:x[[:xdigit:]]+)?部分以兼容123xABCD这类混合格式。

额外扩展(可选)

如果需要支持0x1A3F这类标准十六进制格式,可以在分支中加入该规则:

(?<!\w)(?:(?:[[:xdigit:]]{2}(?:\s)?)+|0x[[:xdigit:]]+|(?:-)?(?:\d+\.?\d*|\.?\d+)(?:x[[:xdigit:]]+)?)(?!\w)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:01:18