为什么这个正则表达式(带有替换)没有按预期匹配?

时间:2012-08-02 20:02:35

标签: regex

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

9
9.
9.5
.5

这是我迄今为止制作的湿粪便来实现这一目标:

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

当我通过9.5时,它返回NULL和.5表示种植面积。我需要它传回9.5。我做错了什么?

2 个答案:

答案 0 :(得分:2)

所以你有四种情况:

  1. 匹配x
  2. 之类的内容
  3. 匹配x.y
  4. 之类的内容
  5. 匹配x.
  6. 之类的内容
  7. 匹配.y
  8. 之类的内容

    所以你走了:

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

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

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

    或者,与匹配组:

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

答案 1 :(得分:1)

使用此正则表达式

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

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