2014-05-20 109 views
0

我有這樣的正則表達式可以正常工作完美匹配USA格式($ 1.50)的貨幣值:正則表達式爲貨幣價值

Regex money = new Regex(@"\w\^\$(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$"); 

我想有一定的幫助,以瞭解如何建立一個這樣的正則表達式,我需要更改我的國家的格式,如更改$R $

我期待在MSDN上的主題,但沒有到目前爲止工作...

回答

1

你的問題有三個部分,並我聽起來好像它主要是關於「學習如何釣魚」,這很棒。

** A。正則表達式你想**

基礎上的評論,你正在尋找這個(see demo):

^R\$\d+(?:\.\d{3})*,\d{2}$ 

的正則表達式

的B.說明這是一個相對簡單的正則表達式,爲此您可以閱讀自動生成的解釋。有幾個網站這樣做。這裏是one(它會在原始網站上顯示得更好)。

NODE      EXPLANATION 
-------------------------------------------------------------------------------- \w      word characters (a-z, A-Z, 0-9, _) 
-------------------------------------------------------------------------------- \^      '^' 
-------------------------------------------------------------------------------- \$      '$' 
-------------------------------------------------------------------------------- (      group and capture to \1: 
-------------------------------------------------------------------------------- 
    \d{1,3}     digits (0-9) (between 1 and 3 times 
          (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    (      group and capture to \2 (0 or more times 
          (matching the most amount possible)): 
-------------------------------------------------------------------------------- 
     \,      ',' 
-------------------------------------------------------------------------------- 
     \d{3}     digits (0-9) (3 times) 
-------------------------------------------------------------------------------- 
    )*      end of \2 (NOTE: because you are using a 
          quantifier on this capture, only the 
          LAST repetition of the captured pattern 
          will be stored in \2) 
-------------------------------------------------------------------------------- |      OR 
-------------------------------------------------------------------------------- 
    (      group and capture to \3: 
-------------------------------------------------------------------------------- 
     \d+      digits (0-9) (1 or more times 
           (matching the most amount possible)) 
-------------------------------------------------------------------------------- 
    )      end of \3 
-------------------------------------------------------------------------------- )      end of \1 
-------------------------------------------------------------------------------- (      group and capture to \4 (optional 
          (matching the most amount possible)): 
-------------------------------------------------------------------------------- 
    \.      '.' 
-------------------------------------------------------------------------------- 
    \d{2}     digits (0-9) (2 times) 
-------------------------------------------------------------------------------- )?      end of \4 (NOTE: because you are using a 
          quantifier on this capture, only the LAST 
          repetition of the captured pattern will be 
          stored in \4) 
-------------------------------------------------------------------------------- $      before an optional \n, and the end of the 
          string 

C.我怎樣才能學會建立一個正則表達式像那樣

下面是我推薦的資源。

  1. 書籍:精通正則表達式(第3版),正則表達式食譜

  2. 網站:regular-expressions.info,RexEgg,FAQ on SO

  3. 工具:使用RegexBuddy(商業,但優秀的調試器) ,regex101.com,Debuggex.com

+0

如果我把** R ** *放在** \ $ **之前,並且保留它: *正則表達式金錢= new Regex(@「\ w \^R \ $(\ d {1,3}(\,\ d {3})* |(\ d +))(\。\ d {2})$」) ; *。而我嘗試使用* isMatch *的值* R $ 1,50 *它仍然返回false。爲什麼? – PlayHardGoPro

+0

@PlayHardGoPro你發送了幾個錯別字。這是更清潔的'^ R \ $(\ d {1,3}(,\ d {2})* |(\ d +))?$':)如果您在regex101.com上使用它,您可以看到結果馬上 – zx81

+0

@PlayHardGoPro這裏是一個[demo](http://regex101.com/r/nG6sX3)順便說一句'''後面的部分允許你匹配更多的數字,如果沒有逗號,那就是你想要的? – zx81

1

你可以只是在你的正則表達式添加R像這樣:

Regex rmoney = new Regex(@"\w\^R\$(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})?$"); 
+0

是否有一個教程/文章或可以讓我明白如何建立一個?我只是不明白這些斜線括號等...; s – PlayHardGoPro

+0

@PlayHardGoPro,http://regexone.com/ – sshashank124

+0

如果我* * 1,50 * R *作爲參數傳遞給* isMatch *它仍然返回false .. 。 – PlayHardGoPro