2014-11-16 4 views
0

숫자 확인을위한 정규 표현식을 작성하려고합니다.여러 조건이있는 정규 표현식

나는 다음과 같은 식별 할 수 있어야한다 :

  • 999
  • 99.99
  • 99,99
  • 99 9/9

하지만 다음 테크네튬, 99BN , 99 $.

그래서 나는이 작업을 거라고 생각 : string rule1 = @"\b[0-9]+(?(.|,|\n){0,1}[0-9]+)\b";

[0-9]+ 첫 번째 부분은 말한다 : 나는 1 개 이상의 숫자가 필요합니다. 점 또는 쉼표 또는 공백 후 나는 점, 쉼표 또는 공백 후 하나 개 이상의 숫자를 필요로하는 첫 번째 부분 다음에 오는 경우

:

(?(.|,|\n){0,1}[0-9]*)

이 두 번째 부분에서 내 의도는 조건을 표현하는 것이었다. 그러나 정규 표현식에 대해 많이 알지 못하기 때문에 나는 예외가있어 런타임 예외가 발생합니다.

+0

마지막 경우에는 숫자에 공백이 있습니다. 그게 의도적 인거야? 두 개의 별개의 숫자로 어떻게 결정하겠습니까? –

+0

줄 바꿈이 아닙니다. 1과 1/2처럼 분수 표현이되도록 고안되었습니다. 1/2 –

+0

예를 들어 혼란 스럽 습니다만, 먼저 유효한 표기법을 4 개 부여한 다음 예외를 명시한 것처럼 명시합니다. 어쨌든이 정규식은 당신이 원하는 것을 다룹니다 : \ b [1-9] [0-9] * ([,.] [0-9] + | * [1-9] [0-9] */[1- 9] [0-9] *)? \ b'. 숫자 범위를 일치 시키려면 Codeplex에서 RegexNumRangeGen을 참조하십시오. – toplel32

답변

1

마지막 사례를 어떻게 처리 할 것인지 잘 모르겠다. 왜냐하면 내가 코멘트에서 말했듯이, 예제에는 공백이 있기 때문이다. 그러나 그것이 줄 바꿈이라고 가정하면, 나는 이것과 같은 것이 작동한다고 믿습니다.

(\b\d+(\.|,|\/)?\d+\b)[^$] 

세분화 :

(
\b   Word break 
\d+   Any digit character (equivalent to your [0-9]), matched one or more times 
(\.|,|\/)? A period (escaped), comma, or slash (escaped), matched zero or one time. 
\d+   Any digit character (equivalent to your [0-9]), matched one or more times 
\b   Word break 
) 
[^$]   Avoid the last case, of 99$ 

나는 here 수있는 범위에서이 테스트를했습니다.

+0

슬래시의 경우 이스케이프 시퀀스가 ​​필요하지 않습니다. – toplel32