2012-11-14 49 views
0

我试图匹配任何组合的浮点数与Microsoft Word中VBA中的正则表达式。匹配 d和。在正则表达式

例子:

<text=""> 
<text="1"> 
<text="2"> 
<text="3"> 
<text="3.5"> 
<text="4"> 
<text="44"> 

我尝试了以下模式:

regex.Pattern = "<text=" & Chr(34) & "\d*\.*\d*" & Chr(34) & ">" 
regex.Pattern = "<text=" & Chr(34) & "[\d\.]*" & Chr(34) & ">" 

有趣的是两种模式都要么匹配44。

+0

供参考:'*'将匹配 “0或更多”。如果你只想使用数字的元素,那么使用'+'(1或更多)。 –

+0

是的,我知道,这是我想要的,我也想处理 Joel

+0

我不知道perl中的单词和VBA我会做这样的事情:“(\ d +(\。\ d +)? )?” – Mithrandir

回答

0

regex tester网站,

正整数--- ^\d+$
负整数--- ^-\d+$
整数--- ^-{0,1}\d+$
正数--- ^\d*\.{0,1}\d+$
负数--- ^-\d*\.{0,1}\d+$
正号码或负号码 - ^-{0,1}\d*\.{0,1}\d+$

来测试空的结果是否有效,并假设所有的正数,你会最终与

regex.Pattern = "<text=" & Chr(34) & "\d*\.{0,1}\d*" & Chr(34) & ">" 
+0

你会注意到这与我的模式没有什么不同,除了你说0或1小数,我允许任何。此外,仍然不适用于我。 – Joel

+0

一个浮点只会有0或1个小数。 1.1.1不是有效的号码 – SeanC

+0

此外,您使用^和$非常不利,因为我的示例文本显示它显然不是行的开始或结束。 – Joel

0

让我们来分解它。浮点数有两部分,积分和小数。有对格式一些选择:

下面是模式的一个很常见的符号:

regex.Pattern = "<text=" & Chr(34) & "(-?\d+(\.\d+)?)?" & Chr(34) & ">" 

一些选择:

  • 你想支持省略不可分割的一部分? (例如” 0.001' )
    使用*而不是+在第一个数字匹配:(-?\d*(\.\d+)?)?

  • 你想支持前导零? (例如000.)
    这会更棘手:)

  • 是否要支持不带小数部分的小数点? (例如,'12'。)
    然后小数点赛后添加?(-?\d*(\.?\d+)?)?

  • 是小数部分强制?
    取出最后?(-?\d*(\.?\d+))?