正则表达式 - 从字符串中提取数字(带2位小数)

时间:2016-12-19 22:11:58

标签: regex excel-vba vba excel

我正在使用RegexExtract从文本中提取数字值。我使用了以下链接中的以下正则表达式[0-9]+(\.[0-9][0-9]?)?,但我发现它只是在小数位后提取两个值。我还需要它前面的数字。不知道为什么它不起作用。我也尝试了不同的变体。

Simple regular expression for a decimal with a precision of 2

我从中提取的文字总是长度相同,大约是100个字符。在下面的文字中我只需要提取数值(x.xx): Gmax = 2.3428

ThisWorkbook.Worksheets(Warn.MachBox.Value & "_C1").Range("B" & Duncan2 + 1).Value = RegexExtract(ThisWorkbook.Worksheets(Warn.MachBox.Value & "_C1").Range("C" & Duncan2 + 1).Value, "Gmax = [0-9]+(\.[0-9][0-9]?)?")

我现有的方式以及我尝试的不同变化只返回0.34并排除小数点前的值(如果有的话)。我需要2.34。

非常感谢任何建议。谢谢!

编辑:忘记添加RegexExtract功能信息。这可以在以下链接中找到: How to extract text within a string of text

2 个答案:

答案 0 :(得分:4)

我会用:

(\d+)(?:\.(\d{1,2}))?

说明:

(           # First matching group
 \d         # A digit (shorthand for [0-9])
   +        # Any number of times
)
(?:         # A non-matching group
   \.       # A literal dot
   (        # Second matching group
    \d      # A digit
      {1,2} # 1 or 2 times (shorthand for \d\d? or [0-9][0-9]?)
   )
)?          # The decimal part is optional

请注意,这不会为您提供匹配组中的点,这在后处理中可能会更容易。如果没有,您可以删除不匹配的组并将点放在第二个匹配组中。

如果这不能提供您想要的结果,那很可能是您调用正则表达式库的方式的问题。

答案 1 :(得分:0)

^-?\d+(\.\d{1,2})?$

这个正则表达式是负数和正数。如果你想在文本中匹配这个正则表达式,你必须删除^ $。

{1,2}选项用于表示小数的精度。对于您的问题,您可以使用此选项:{2}