2012-11-14 43 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+))?