1

我正在尝试匹配以下字符串:

9
9.
9.5
.5

到目前为止,这是我为实现此目的而制作的:

(?<acreage>(?(\d+)((\.\d*)?)|(\.\d+)))

当我传入 9.5 时,它返回 NULL 和 .5 表示面积。我需要它传回 9.5。我究竟做错了什么?

4

2 回答 2

2

所以你有四种情况:

  1. 匹配类似的东西x
  2. 匹配类似的东西x.y
  3. 匹配类似的东西x.
  4. 匹配类似的东西.y

所以你去:

\d+\.\d+|\d+\.?|\.d+

您可以通过将第一组中的数字设为可选来摆脱后两种可能性中的任何一种,但不能同时使用两者。例如:

\d*\.\d+|\d+\.?

或者,使用匹配组:

(?<acreage>\d*\.\d+|\d+\.?)
于 2012-08-02T20:05:10.870 回答
1

使用这个正则表达式

^(?=\.?\d+\.?\d*)\d*\.?\d*$

或者

^(\d+\.\d*)|(\d*\.\d+)|(\d+)$

于 2012-08-02T20:08:06.343 回答