2015-03-19 44 views
2

我想創造出符合以下正則表達式:正則表達式爲1或2或3個小數,沒有前導零,精度2和分數被允許

  1. 一個或兩個或三個十進制數。

  2. 十進制數內沒有前導零。

  3. 精密2.

  4. 適當的級分被允許(0 .__號碼)。

  5. 的十進制數前無文字

正則表達式應該符合以下幾點:

  • 123.45
  • 103.67
  • 100.45
  • 25.68
  • 5.97
  • 1.05
  • 23.07
  • 187.08
  • 0.26

正則表達式不應當符合以下:

  • 0.45
  • 1234.45
  • 023.45
  • 03.67
  • 845.7

我想出了下面的正則表達式:

(?<!.)^([1-9][0-9]{0,2}\.[0-9][0-9])$ 

它滿足上述所有除了分數。

如果十進制數字有2或3位數字,我不想要前導零。但是,如果它是適當的分數,我確實希望允許0 .__)。

但是,我的正則表達式與「0 .__」十進制數不匹配,因爲它由於「^[1-9]」而期望數字以1開頭。

請指教我如何修改我的正則表達式以匹配「0 .__」數字。

+0

「一兩個或三個小數」是什麼意思?或者說,它是如何適合「精確2」的? – vermillon 2015-03-19 10:22:52

+1

@Qwerty什麼是'(? Biffen 2015-03-19 10:23:52

回答

4

試試這個正則表達式。

\b(?!0\d{1,2}\.)\d{1,3}\.\d{2}\b 

Demo

1

這個怎麼樣:

\b(0|[1-9]\d{0,2})\.\d{2}\b 

Here你可以看到,它匹配的正是你想要的。

0

你可以使用這個表達式:

^(?!0+[1-9])\d{1,3}\.\d{2}$ 

RegEx Demo

(?!0+[1-9])是負先行,將停止數前導零。

0

假設你正在使用re.match,這裏是最短的,你可以使用:

(?!0)\d{1,3}\.\d{2} 

如果您正在使用搜索:

^(?!0)\d{1,3}\.\d{2}$ 

不需要治療的第一個數字不同的是,所以你可以使用\ d(與[0-9]相同),並確保第一個字符不是0且帶有負向前視(?!0)。

相關問題