2012-12-19 14 views
6

Zasadniczo chcę policzyć zestawy określonych znaków w ciągu znaków. Innymi słowy muszę policzyć wszystkie litery i cyfry, i nic więcej. Ale nie mogę znaleźć odpowiedniej (regex) składni. Oto co mam ...Jak liczyć zestawy określonych znaków w ciągu znaków

public double AlphaNumericCount(string s) 
{ 
    double count = Regex.Matches(s, "[A-Z].[a-z].[0-9]").Count; 
     return count; 
} 

Szukałem wokół, ale nie mogę wydawać się znaleźć niczego, co pozwala na więcej niż jeden zestaw znaków. Ponownie, nie jestem pewien składni może być "[A-Z]/[a-z]/[0-9]" lub coś. Anywho, idź łatwo na mnie - to mój pierwszy dzień z Regex.

Dzięki.

Odpowiedz

3

Jeśli chcesz uniknąć wyrażeń regularnych, możesz po prostu iterację znaków w łańcuchu i sprawdzić, czy są one list lub cyfrowy przy użyciu Char.IsLetterOrDigit.

public int AlphaNumericCount(string s) 
{ 
    int count = 0; 

    for(int i = 0; i < s.Length; i++) 
    { 
     if(Char.IsLetterOrDigit(s[i])) 
      count++; 
    } 

    return count; 
} 
+0

Ooh, ładny. Dzięki :) – Sizza

+0

Bez problemu. Regex może wyglądać ładniej, ale w zależności od długości ciągu znaków/liczby połączeń * może * być wolniejszy. – keyboardP

5

Regular Expression Cheat Sheet

Expresso Regular Expression tool

[A-Z].[a-z].[0-9] dopasuje każdą literę ([A-Z]), a następnie dowolny znak (.), a następnie przez dowolną małą literę ([a-z]), a następnie dowolny znak (.), po którym następuje dowolna liczba ([0-9]).

To, co chcesz dopasować do dowolnej litery lub cyfry, to [A-Za-z0-9].

+0

nice, Dzięki za to :) – Sizza

4

Jeśli nie jest wymagane używanie wyrażeń regularnych, nie jest to łatwe, zastępca rozwiązanie:

return s.ToCharArray().Count(c => Char.IsNumber(c) || Char.IsLetter(c)); 
+1

'ToCharArray()' nie jest tutaj konieczne. 'string' już implementuje' IEnumerable ' –

Powiązane problemy