2011-01-25 14 views
48

Otrzymuję "7+" lub "5+" lub "+5" od XML i chce wyodrębnić tylko liczbę z ciągu za pomocą Regex. np Regex.Match funkcja()Regex, aby uzyskać NUMBER tylko z ciągu

 stringThatHaveCharacters = stringThatHaveCharacters.Trim(); 
     Match m = Regex.Match(stringThatHaveCharacters, "WHAT I USE HERE"); 
     int number = Convert.ToInt32(m.Value); 
     return number; 

Odpowiedz

61

\d+

\d oznacza dowolną liczbą + dla jednego lub więcej. Jeśli chcesz złapać liczby ujemne, możesz również użyć numeru -?\d+.

Zauważ, że jako ciąg znaków, to powinny być reprezentowane w języku C# jak "\\d+" lub @"\d+"

4

Albo [0-9] lub \d powinno wystarczyć, jeśli potrzebujesz tylko pojedynczą cyfrę. Dołącz +, jeśli potrzebujesz więcej.


1 Semantyka różnią się nieco jak \d potencjalnie pasuje żadnego cyfrę dziesiętną w każdym scenariuszu, że obecnie nie korzysta z cyfr dziesiętnych.

+0

proszę określić dokładną regex do używania w funkcji Regex.Match .... bo nie jestem dobry in Regex (SYNTAX) –

+0

Dla pojedynczej cyfry nie potrzebujesz wyrażeń regularnych: 'char digit = s. First (Char.IsDigit);'. Dodałbym to do mojej odpowiedzi, ale nie sądzę, że tak jest w tym przypadku. – Kobi

+0

@Kobi: To jednak wymagałoby jawnej iteracji ciągu. Większość osób decydujących się na używanie regex nie chciałoby tego zrobić :-) – Joey

80

Powyższe odpowiedzi są świetne. Jeśli jesteś w potrzebie analizowania wszystkich numerów na sznurku, które są niesąsiadujące wówczas następujące mogą być pomocne:

string input = "1-205-330-2342"; 
string result = Regex.Replace(input, @"[^\d]", ""); 
Console.WriteLine(result); // >> 12053302342 
+0

Odpowiada mi na tę odpowiedź - działa! – peterincumbria

Powiązane problemy