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

jme*_*ddy 2 regex excel vba

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

精度为 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 函数信息。这是在以下链接中找到的: 如何在文本字符串中提取文本

小智 6

我会用:

(\d+)(?:\.(\d{1,2}))?
Run Code Online (Sandbox Code Playgroud)

解释:

(           # 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
Run Code Online (Sandbox Code Playgroud)

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

如果这没有给出您想要的结果,那很可能是您调用正则表达式库的方式的问题。