[C#] 숫자 만 정규식

정규 표현식을 전혀 사용하지 않았으므로 문제 해결에 어려움이 있습니다. 포함 된 문자열이 모든 숫자 일 때만 정규 표현식이 일치하도록하고 싶습니다. 그러나 아래 두 가지 예에서는 모든 숫자와 “1234 = 4321″과 같은 등호를 포함하는 문자열과 일치합니다. 나는이 행동을 바꿀 수있는 방법이 있다고 확신하지만, 내가 말했듯이 정규 표현식으로 많은 것을 한 적이 없습니다.

string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");

if (regex.IsMatch(compare))
{
    //true
}

regex = new Regex("[0-9]");

if (regex.IsMatch(compare))
{
    //true
}

중요한 경우 C # 및 .NET2.0을 사용하고 있습니다.



답변

시작 및 끝 앵커를 사용하십시오.

Regex regex = new Regex(@"^\d$");

"^\d+$"두 자리 이상 일치해야하는 경우 사용하십시오 .


참고 "\d"일치 [0-9]와 동부 아라비아 숫자와 같은 다른 숫자 문자 ٠١٢٣٤٥٦٧٨٩. "^[0-9]+$"일치를 아라비아 숫자 0-9로 제한하는 데 사용하십시오 .


숫자 이외의 숫자 표현을 포함해야하는 경우 (예 : 10 진수 값과 같은) 정규 표현식으로 숫자를 구문 분석하는 @tchrist포괄적 인 안내서를 참조하십시오 .


답변

정규식은 숫자가 포함 된 것과 일치하며 앵커를 사용하여 전체 문자열을 일치시킨 다음 하나 이상의 숫자를 일치시킵니다.

regex = new Regex("^[0-9]+$");

(가) ^하여 문자열의 시작을 고정합니다, (가) $문자열의 끝을 고정 것이며,이 +하나를 일치 이상 (이 경우의 수)를 앞에 무슨.


답변

소수점과 천 개의 마커를 견뎌야하는 경우

var regex = new Regex(@"^-?[0-9][0-9,\.]+$");

숫자가 음수가 될 수 있으면 “-“가 필요합니다.


답변

전체 문자열과 일치하지 않는 “일치”를 찾기 때문에 일치합니다. 문자열의 시작과 끝을 구체적으로 찾도록 regexp를 변경하여이 문제를 해결할 수 있습니다.

^\d+$


답변

아마도 내 방법이 도움이 될 것입니다.

    public static bool IsNumber(string s)
    {
        return s.All(char.IsDigit);
    }


답변

이것은 정수와 10 진수로 작동합니다. 숫자에 코마 천 구분 기호가 있으면 일치하지 않습니다.

"^-?\\d*(\\.\\d+)?$"

이것과 일치하는 일부 문자열 :

894
923.21
76876876
.32
-894
-923.21
-76876876
-.32

그렇지 않은 문자열 :

hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.


답변

^ \ d + $, 영어에서 “문자열의 시작”, “1 자리 이상”, “문자열의 끝”