2012-04-26 27 views
19

Tôi đang đấu tranh với một mẫu regex sẽ kéo văn bản ra khỏi một chuỗi thành các nhóm có tên.Mẫu regex cho các nhóm chụp được đặt tên trong .NET là gì?

Ví dụ A (có phần tùy ý) sẽ giải thích rõ nhất những gì tôi đang cố gắng đạt được.

string input = 
    "Mary Anne has been to 949 bingo games. The last was on Tue 24/04/2012. She won with the Numbers: 4, 6, 11, 16, 19, 27, 45"; 

string pattern = 
    @"(?<Person>\w+?) has been to (?<NumberOfGames>\d+?) bingo games. The last was on (?<Day>...?) (?<Date>...?). She won with the Numbers: (?<Numbers>...?)"; 

Regex regex = new Regex(pattern); 
var match = regex.Match(input); 

string person = match.Groups["Person"].Value; 
string noOfGames = match.Groups["NumberOfGames"].Value; 
string day = match.Groups["Day"].Value; 
string date = match.Groups["Date"].Value; 
string numbers = match.Groups["Numbers"].Value; 

Tôi dường như không thể lấy mẫu regex để làm việc, nhưng tôi nghĩ rằng điều này giải thích đủ rõ. Về cơ bản, tôi cần phải có được tên người, số lượng trò chơi, v.v.

Có ai có thể giải quyết vấn đề này và giải thích mẫu regex thực tế mà họ đã làm không?

Trả lời

25
string pattern = @"(?<Person>[\w ]+) has been to (?<NumberOfGames>\d+) bingo games\. The last was on (?<Day>\w+) (?<Date>\d\d/\d\d/\d{4})\. She won with the Numbers: (?<Numbers>.*?)$"; 

Bài đăng khác đã đề cập cách kéo nhóm, nhưng regex này khớp với thông tin bạn nhập vào.

1

Giả sử regex việc mã để nhận được nhóm có tên sẽ là:

string title = match.Groups["Person"].Value; 
string drawNumber = match.Groups["NumberOfGames"].Value; 
5

Có một cái nhìn tại the documentation for Result():

Trả về việc mở rộng mô hình thay thế quy định.

Bạn không muốn bất kỳ mẫu thay thế nào, vì vậy phương pháp này không phải là giải pháp phù hợp.

Bạn muốn truy cập các nhóm đối sánh, do đó, hãy thực hiện điều đó: có a Groups property.

Với mã của bạn sẽ trông như thế này:

string title = match.Groups["Person"].Value; 
string drawNumber = match.Groups["NumberOfGames"].Value; 

Ngoài ra, như russau một cách chính xác chỉ ra, mô hình của bạn không phù hợp với văn bản của bạn: Date không chỉ là ba nhân vật.

+0

cảm ơn, tôi đã cập nhật câu hỏi với đề xuất của bạn ở đây, tuy nhiên những gì tôi theo sau là mẫu regex. –

1

Hãy thử điều này:

string pattern = @"(?<Person>\w+?) has been to (?<NumberOfGames>\d+?) bingo games. The last was on (?<Day>...?) (?<Date>\d+/\d+/\d+). She won with the Numbers: (?<Numbers>...?)"; 

regex của bạn không phù hợp với phần ngày của chuỗi.

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