2014-05-20 2 views
0

나는 미국 포맷 ($ 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 ** * 전에 ** \ $ **을 놔두고 다음과 같이 둡니다. * Regex money = 새로운 정규식 (\ "\ w \^R \ $ (\ d {1,3} (\, \ d {3}) * | (\ d +)) (\. \ d {2})? $") ; *. 그리고 * isMatch * 값을 * R $ 1,50 *으로 사용하려고 시도합니다. 여전히 false를 반환합니다. 왜? – PlayHardGoPro

+0

@PlayHardGoPro 귀하가 보낸 내용에 몇 가지 오타가 있습니다. regex101.com에서 그걸 가지고 놀면 결과를 볼 수 있습니다. ($ d {1,3} (, \ d {2}) * | (\ d +)) 바로 – zx81

+0

@PlayHardGoPro 여기에 [데모] (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

* isMatch *에 매개 변수로 * R $ 1,50 *을 전달하면 여전히 false를 반환합니다. . – PlayHardGoPro