2011-09-20 5 views
-1

이 정규식을 사용하여 텍스트 상자에서 과학 표기법의 유효성을 검사하지만 작동하지 않습니다. 이것은 아무 것도 입력 할 수 없습니다.누군가이 정규식이 작동하지 않는 이유를 말해 줄 수 있습니까?

regex = new Regex("[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?"); 

미리 감사드립니다.

+4

당신이 Darek Slager의를 사용하여 시도 되세요 실패 표현식 문제를 해결하는 .NET Regex 테스터? http://derekslager.com/blog/posts/2007/09/a-better-dotnet-regular-expression-tester.ashx –

+4

전달해야 할 사항과 전송해서는 안될 내용을 게시 한 경우 도움이 될 수 있습니다. – RobinGower

+0

+ 실제로 정규 표현식을 사용하는 방법의 예 - 일치하지 않는 문자가 있는지 또는 전체 문자열이 일치해야하는지 테스트하고 있습니까? – Dexter

답변

0

실제로이 작업을 수행하고 싶으십니까?

여기 RegexBuddy에서 스크린 샷입니다 :

Regex Explained

+1

내가 RegexBuddy를 좋아하는만큼, 이것은 정규 표현식 자체보다 읽기가 더 어렵다. –

2

문제는 정규 표현식은 빈 문자열과 일치한다는 것입니다. 쉬운 해결책은 앞에 ^을 추가하고 끝에는 $을 추가하여 전체 입력 문자열이 정규 표현식과 일치해야합니다.

var numbers = new[] { 
    "0", "1", "01", "+1", "-1", "+0", "-0", "1.9", "1.09", "1.90", "1e0", "1e01", "1e10" 
}; 
var regex = new Regex("^[-+]?(0?|[1-9][0-9]*)(\\.[0-9]*[1-9])?([eE][-+]?(0|[1-9][0-9]*))?$"); 
var valid = numbers 
    .Select(n => regex.Match(n)) 
    .Where(m => m.Success) 
    .Select(m => m.Value); 

다음에 발생합니다 valid의 요소를 인쇄 :

0 
1 
+1 
-1 
+0 
-0 
1.9 
1.09 
1e0 
1e10 

공지 사항 01, 1.901e01이 일치하지 않는 방법 그러나 나는 추측 여기

작은 테스트입니다 그것은 의도적 인 것입니다.

0

다음은 매우 유용하다고 생각되는 또 다른 테스터입니다. 지수를 캡처하는 동안 과학 표기법이 포함 된 부동 소수점 숫자를 찾으려면 [- +]? [0-9] *. [0-9] + ([eE] [- +]? [0-9] +)?

0
[-+]?(0|[1-9])[0-9]*([.][0-9]*)?([eE][-+]?(0|[1-9])[0-9]*)? 

당신이 원하는 것을 다소 가까운 ....하지만 당신은 당신이 통과 할 것으로 예상 표현의 테스트 세트를 준 경우 어쩌면 도움이 될 것이다 (http://www.regular-expressions.info/floatingpoint.html에서)/

관련 문제