2009-10-17 4 views
8

Я конвертирую код Java в C# и нуждаюсь в замене регулярного выражения Java. Типичным применением являетсяЧто такое эквивалент C# для java.util.regex?

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; 

, который должен извлечь группу захвата из сопоставленной целевой строки. Я был бы благодарен за простые примеры.


EDIT: Я теперь добавил C# эквивалент кода в качестве ответа.

EDIT: Here is a tutorial об использовании фактических выражений.

EDIT: (. И Perl) Here is a useful comparison из C# и Java

+0

@Mehrdad благодарит. Это именно то, что я хотел, хотя вопрос получил откуда-то внизу (возможно, дубликат, хотя я пытался найти SO) –

+0

Не знаю. Не я. Обычно дупы не получают нисходящих спусков. Они закрываются. –

+2

@ Джейсон: И ваша точка? Чтобы люди не могли найти ответы на них в StackOverflow? Что они должны попробовать удачу в Google, где они могут найти неправильные ответы? SO было * сделано *, чтобы найти ответы на вопросы программирования. Google не был. – jalf

ответ

5

Я создал C# эквивалент кода Java в вопросе, как:

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 (См @ полезные комментарии Мердад в)

Исходный код был:

// ... 

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

Вы должны убедиться, что на самом деле есть совпадение, прежде чем пытаться получить доступ к 'matches [0]'. В противном случае вы получите «IndexOutOfRangeException». –

+0

@Mehrdad спасибо. Я использовал его в цикле foreach, который был безопасен, а затем попытался упростить его. Изменили –

+0

Да, если вы используете его в 'foreach', лучше ** не ссылаться на' Count' ** заранее, так как это заставит 'Regex' оцениваться немедленно (в отличие от ленивой оценки, которую вы получаете с 'foreach') –

Смежные вопросы