2009-10-17 39 views
8

Tôi đang chuyển đổi mã Java thành C# và cần thay thế việc sử dụng regex của Java. Cách sử dụng thông thường làTương đương với C# của java.util.regex là gì?

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
//... 

String myString = "B12"; 
Pattern pattern = Pattern.compile("[A-Za-z](\\d+)"); 
Matcher matcher = Pattern.matcher(myString); 
String serial = (matcher.matches()) ? matcher.group(1) : null; 

nên trích xuất nhóm chụp từ chuỗi mục tiêu phù hợp. Tôi rất biết ơn những ví dụ đơn giản.


EDIT: bây giờ tôi đã thêm C# tương đương với các mã như một câu trả lời.

EDIT: Here is a tutorial về việc sử dụng các biểu thức thực tế.

EDIT: (. Và Perl) Here is a useful comparison của C# và Java

+0

@Mehrdad cảm ơn. Đó là chính xác những gì tôi muốn mặc dù câu hỏi có một downvote từ một nơi nào đó (có lẽ là một bản sao, mặc dù tôi đã cố gắng tìm kiếm SO) –

+0

Không biết. Không phải tôi. Dupes thường không nhận được downvotes. Họ bị đóng cửa. –

+2

@ Jason: Và quan điểm của bạn là gì? Mọi người không nên tìm thấy câu trả lời họ cần trên StackOverflow? Rằng họ nên thử vận ​​may của họ trên Google, nơi họ có thể tìm thấy câu trả lời sai? SO đã được * thực hiện * là nơi để tìm câu trả lời cho các câu hỏi lập trình. Google thì không. – jalf

Trả lời

5

Tôi tạo ra C# tương đương với mã Java trong các câu hỏi như:

string myString = "B12"; 
Regex rx = new Regex(@"[A-Za-z](\\d+)"); 
MatchCollection matches = rx.Matches(myString); 
if (matches.Count > 0) 
{ 
    Match match = matches[0]; // only one match in this case 
    GroupCollection groupCollection = match.Groups; 
    Console.WriteLine("serial " + groupCollection[1].ToString()); 
} 

EDIT (Xem @ ý kiến ​​hữu ích Mehrdad của)

Mã ban đầu là:

// ... 

MatchCollection matches = rx.Matches(myString); 
foreach (Match match in matches) 
{ 
    GroupCollection groupCollection = match.Groups; 
    Console.WriteLine("serial " + groupCollection[1].ToString()); 
} 
+0

Bạn nên chắc chắn rằng có thực sự là một trận đấu trước khi cố gắng truy cập 'trận đấu [0]'. Nếu không, bạn sẽ nhận được 'IndexOutOfRangeException'. –

+0

@Mehrdad cảm ơn. Tôi đã có nó trong một vòng lặp foreach được an toàn và sau đó đã cố gắng để đơn giản hóa nó. Đã chỉnh sửa –

+0

Vâng, nếu bạn đang sử dụng nó trong 'foreach', tốt hơn là không nên tham chiếu' Count' ** trước vì nó sẽ khiến cho 'Regex' được đánh giá ngay lập tức (trái ngược với đánh giá lười biếng bạn nhận được với 'foreach') –

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