2012-12-19 30 views
6

Về cơ bản, tôi muốn đếm các bộ ký tự cụ thể trong một chuỗi. Nói cách khác, tôi cần phải đếm tất cả các chữ cái và số, và không có gì khác. Nhưng tôi không thể tìm thấy cú pháp đúng (regex). Đây là những gì tôi có ...Cách đếm các bộ ký tự cụ thể trong một chuỗi

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

Tôi đã tìm kiếm xung quanh, nhưng không thể dường như để tìm bất cứ điều gì cho phép nhiều hơn một tập hợp các ký tự. Một lần nữa, tôi không chắc chắn về cú pháp có thể là "[A-Z]/[a-z]/[0-9]" hoặc gì đó. Anywho, hãy dễ dàng với tôi - ngày đầu tiên của tôi sử dụng Regex.

Cảm ơn.

Trả lời

3

Nếu bạn muốn tránh biểu thức thông thường, bạn chỉ có thể lặp qua các ký tự trong chuỗi và kiểm tra xem họ là một lá thư hoặc chữ số sử dụng 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, thoải mái nhất. Cảm ơn :) – Sizza

+0

Không sao cả. Regex có thể nhìn gọn hơn nhưng, tùy thuộc vào độ dài của chuỗi/số cuộc gọi, chúng * có thể * chậm hơn. – keyboardP

5

Regular Expression Cheat Sheet

Expresso Regular Expression tool

[A-Z].[a-z].[0-9] sẽ phù hợp với bất kỳ chữ cái viết hoa ([A-Z]), tiếp theo là bất kỳ ký tự (.), tiếp theo là bất kỳ chữ thường ([a-z]), tiếp theo là bất kỳ ký tự (.), theo sau là bất kỳ số nào ([0-9]).

Nội dung bạn muốn đối sánh trên bất kỳ chữ cái hoặc số nào là [A-Za-z0-9].

+0

nice, Thanks for that :) – Sizza

4

Nếu việc sử dụng các biểu thức thông thường là không cần thiết, có một cách dễ dàng, giải pháp thay thế:

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

'ToCharArray()' là không cần thiết ở đây. 'string' đã triển khai' IEnumerable ' –

Các vấn đề liên quan