2009-10-17 23 views
8

Konwertuję kod Java na C# i trzeba zastąpić użycie wyrażenia regularnego Java. Typowym zastosowaniem jest wyodrębnianie grupy przechwytywania z dopasowanego ciągu docelowego. Byłbym wdzięczny za proste przykłady.Co to jest odpowiednik C# w java.util.regex?


EDIT: Mam teraz dodał C# odpowiednik kodu jako odpowiedź.

EDYTUJ: Here is a tutorial na temat korzystania z rzeczywistych wyrażeń.

EDIT: (. I Perl) Here is a useful comparison C# i Java

+0

@Mehrdad dzięki. Dokładnie tego chciałem, chociaż pytanie skądś pochodzi (być może duplikat, chociaż próbowałem szukać SO) –

+0

Nie wiem. To nie ja. Duplikaty zazwyczaj nie docierają na dół. Oni się zamykają. –

+2

@Jason: A chodzi o to? Że ludzie nie będą w stanie znaleźć odpowiedzi, których potrzebują na StackOverflow? Że powinni spróbować szczęścia w Google, gdzie mogą znaleźć złe odpowiedzi? SO zostało * stworzone *, aby znaleźć miejsce na odpowiedzi na pytania dotyczące programowania. Google nie było. – jalf

Odpowiedz

5

stworzyłem C# odpowiednik kodu Java w pytaniu jak:

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 (Zobacz @ pomocne komentarze Mehrdad za)

Oryginalny kod został:

// ... 

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

Powinieneś upewnić się, że faktycznie istnieje dopasowanie, zanim spróbujesz uzyskać dostęp do 'match [0]'. W przeciwnym razie otrzymasz "IndexOutOfRangeException". –

+0

@Mehrdad dzięki. Miałem go w pętli foreach, która była bezpieczna, a następnie starałem się ją uprościć. Zmieniono –

+0

Tak, jeśli używasz go w 'foreach', to lepiej ** nie odwoływać się wcześniej' Count' **, ponieważ spowoduje to natychmiastową ocenę 'Regex' (w przeciwieństwie do leniwej oceny, którą otrzymujesz z 'foreach') –

Powiązane problemy