2013-06-10 25 views
6

Sử dụng C# và Regex Tôi có một tình huống kỳ lạ:Regex MatchCollection trở nên quá nhiều kết quả

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645"; 
MatchCollection collection = Regex.Matches(substr, @"[\d]*"); 

Trong thế giới của tôi ở trên sẽ cung cấp cho tôi một kết quả trong 'bộ sưu tập' có chứa 6 kết quả. Kỳ lạ là bộ sưu tập của tôi chứa 12 kết quả và mỗi kết quả thứ hai là {} (trống).

Tôi đã cố gắng viết lại nó để:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645"; 
Regex regex = new Regex(@"[\d]*"); 
MatchCollection collection = regex.Matches(substr); 

Nhưng nó mang lại cho tôi những kết quả chính xác như nhau. Tôi đang thiếu gì ở đây?

Tôi đang sử dụng .Net framework 4.5, C#

Trả lời

7

Tôi tin rằng vấn đề là * lượng hóa của bạn. Nó khớp với số không hoặc nhiều ký tự, có nghĩa là một chuỗi rỗng là kỹ thuật phù hợp. Bạn cần phải sử dụng + lượng hóa, như thế này:

string substr = "9074552545,9075420530,9075662235,9075662236,9075952311,9076246645"; 
MatchCollection collection = Regex.Matches(substr, @"\d+"); 

// or 
Regex regex = new Regex(@"\d+"); 
MatchCollection collection = regex.Matches(substr); 

Nó sẽ đảm bảo rằng chỉ chuỗi với một hoặc nhiều chữ số được trả về.

Lưu ý, tôi cũng đã loại bỏ lớp nhân vật ([]) xung quanh \d vì nó hoàn toàn không cần thiết ở đây.

Đọc thêm:

+0

lưu ngày của tôi! Cảm ơn bạn p.s.w.g :-) – olf

1

Không cần cho regex:

string[] results = substr.Split(','); 
Các vấn đề liên quan