C#如何编写正确的正则匹配查询以同时匹配整数和浮点数
问题修正方案
你当前的正则存在两个明显问题:
- 规则强制要求必须出现小数点+小数点后数字,无小数点的整数无法被匹配
- 片段
\.+代表匹配1个及以上连续小数点,会错误命中12..3这类不符合数字规范的非法内容
可用正则片段
将原有捕获组替换为以下内容,即可同时覆盖整数、标准格式浮点数的匹配需求:
([0-9]+(?:\.[0-9]+)?)
规则逻辑
[0-9]+:匹配至少1位整数部分,纯整数场景下仅靠这部分即可完成匹配(?:\.[0-9]+)?:用非捕获组包裹小数段,末尾的?标识整个小数段为可选匹配项;其中\.固定匹配单个小数点,[0-9]+匹配小数点后至少1位数字,仅当数字存在小数部分时才会触发这部分匹配- 匹配效果验证:
- 整数
12可正常命中,捕获值为12 - 浮点数
12.5可正常命中,捕获值为12.5 - 多小数点的非法内容
12..3不会被误匹配
- 整数
修正后的完整C#代码
String RateBuy7 = Regex.Match(Response, @"</a></td><td>([0-9]+(?:\.[0-9]+)?)</td><td>").Groups[1].Value;
扩展提示:如果后续需要兼容带负号的数字,只需在捕获组开头添加
-?即可,对应写法为(-?[0-9]+(?:\.[0-9]+)?)
内容的提问来源于stack exchange,提问作者Nick192395
相关产品推荐
相关产品推荐

