我正在使用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
答案 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}