2011-01-25 24 views
48

XML'den "7+" veya "5+" veya "+5" ifadelerini alıyorum ve Regex kullanarak yalnızca dizeden sayı almak istiyorum. örneğin Regex.Match() işlevRegex yalnızca Dize'den alınacak regex

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

cevap

61

\d+

\d bir rakam, bir ya da daha fazlası için + temsil eder. Negatif sayıları da yakalamak istiyorsanız, -?\d+'u kullanabilirsiniz. Yalnızca tek bir rakam gerekirse bir dize olarak, bu "\\d+" olarak C# temsil edilmesi gerektiğini

Not veya @"\d+"

4

Ya [0-9] veya \d yeterli olacaktır. Daha fazlasına ihtiyacınız varsa + ekleyin. \d potansiyel orada ondalık basamak kullandığı herhangi bir komut herhangi ondalık rakam ile eşleşen olarak


1 semantik biraz farklıdır.

+0

Regex.Match işlevinde kullanılacak tam regex tanımlar mısınız iyi değil im Çünkü Regex (SYNTAX) –

+0

Tek bir basamak için bir regex'e ihtiyacınız yoktur: 'char digit = s.First (Char.IsDigit);'. Bunu cevabıma eklerim, ama bence burada durum böyle değil. – Kobi

+0

@Kobi: Yine de, bu yine de dizede açıkça yineleme yapılmasına ihtiyaç duyardı. Regex kullanmayı tercih eden çoğu insan bunu yapmak istemez :-) – Joey

80

Yukarıdaki cevaplar harika. Eğer ardışık olmayan olduklarını bir dize dışına tüm numaraları ayrıştırma ihtiyacı varsa o zaman şu bazı yardımcı olabilir: ....

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

Bu cevap bana uygun - işe yarıyor! – peterincumbria