REGEX从.1-5获取数字

时间:2016-01-27 00:06:13

标签: regex powershell

是否可以从字符串中获取.1到5之间的任何数字。这是我到目前为止所拥有的

def

我的问题是,这也将6.832号码作为.832。我有两个问题。有没有办法让整个数字失败,如果它大于.1而且第二个问题是我可以做类似[.1-5]的事情。有没有办法使用小数而不是整数来表示范围。

此外,我只需要第二个小数

3 个答案:

答案 0 :(得分:2)

目前你的正则表达式确实存在一些问题。它与你的想法不符。

这是我在powershell中所做的:

$strings = @("test6.832test", "test3.832test")
$pattern = "(?<!\d|\d\.)((?!0\.0)[0-4](\.\d{1,3})?|5(\.0{1,3})?)(?!\d|\.\d)"

foreach ($string in $strings)
{
    if($string -match $pattern){
            Write-Host "yay" $Matches[1]
    }
}

让我们详细了解正则表达式:

(?<!\d|\d\.)((?!0|0\.0)[0-4](\.\d{1,3})?|5(\.0{1,3})?)(?!\d|\.\d)
  • (?<!\d|\d\.)这可以确保在我们匹配之前,在此匹配之前不会有数字或数字 - 小数点。

  • (?!0(?:[^.]|\.0)表示它不低于0.1

  • [0-4]这只会匹配数字0,1,2,3或4.我认为如果你想匹配.1领先的 0

  • [0-4](\.\d{1,3})?这匹配小数,然后是1到3的小数。如果没有这样做,您可以匹配0.02。问号使小数可选。

  • |5(\.0{1,3})?这会处理上限5.这只匹配5或5.0或5.00或5.000

  • (?!\d|\.\d)表示我们在匹配后不得匹配数字或小数位数。这可以防止"test0.01"仅与第一个匹配。

Regex101,如果你想看到它&#34;在行动&#34;或者得到更好的解释。

答案 1 :(得分:1)

解决方法是以某种方式提取String的数量,然后对值进行简单比较以过滤您想要保留的值。

如果您无法提取号码,请检查this page。 这是一个关于正则表达式的文档很好的教程。

答案 2 :(得分:0)

应该可以通过一系列替换来实现:

(?<![\d.])(?:[1-4](?:\.\d*)?|5(?:\.0*)?|\.[1-9]\d*)(?![\d.])

解释

 (?<! [\d.] )                  # Not a digit nor dot behind
 (?:                           # Group, one of these
      [1-4]                         # 1-4
      (?: \. \d* )?                 # optional decimal fraction
   |                              # or,
      5                             # 5      
      (?: \. 0* )?                  # optional dot 0
   |                              # or
      \. [1-9] \d*                  # decimal fraction >= .1
 )                             # End group
 (?! [\d.] )                   # Not a digit nor dot ahead