首页 > 解决方案 > 正则表达式 - 从字符串中仅获取十进制数

问题描述

我在下面有一个正则表达式:

(?<=Bonus)[\s+][\$][\s+]?(\d(?:[d{0,2}.\s]*\d)?)

这得到了预期的结果,但是,有时我也会得到一个额外的数字。

例如,这是上下文:

Bonus $0. 01 87% 88% 89% 90% 92% 93% 94%

所以我的正则表达式得到 0 。01就好了,但不是每次。当有更多如下行时:

Bonus $0. 01 87% 88% 89% 90% 92% 93% 94%
...
Bonus $0. 11 87% 88% 89% 90% 92% 93% 94%
...
Bonus $0. 15 87% 88% 89% 90% 92% 93% 94%
...

有时它会从字符串中得到一个额外的数字:

0. 01
0. 11 8
0. 15

或有时会漏掉一位小数:

0. 1 (but it should be 0. 15)

预期结果将始终是一个小数点后 2 位的数字。数字中可能有也可能没有空格。可能像 0.01、0. 01 甚至 0.(更多空格)01...

我当前的正则表达式有什么问题?

标签: c#regex

解决方案


正确匹配所有内容: (?<=Bonus)[\s+][\$][\s+]?(\d*\.\s*\d{2}?)


推荐阅读