2016-12-25 1 views
1

Ich habe Worte annehmen A 1, A 12, A 123, A 1234 und gleich für B 1, B 12, B 123, B 1234 wo 123 bedeutet drei Ziffern Nun, als ich dies tun:Erhalten Sie volles Wort von Match C# nicht Gruppe

MatchCollection ForA1 = Regex.Matches(inFile, @"\b(A [0-9])\b"); 
MatchCollection ForA2 = Regex.Matches(inFile, @"\b(A [0-9][0-9])\b"); 
.... and so on for three and four digits and B; total 8 lines 

den Code zu reduzieren ich dies getan:

MatchCollection ForAB1 = Regex.Matches(inFile, @"\b(A [0-9]|B [0-9])\b"); 
MatchCollection ForAB2 = Regex.Matches(inFile, @"\b(A [0-9][0-9]|B [0-9][0-9])\b"); 
.... and so on for three and four digits; total 4 lines 

Jetzt möchte ich dies tun:

MatchCollection ForAB1234 = Regex.Matches(inFile, @"\b(A [0-9]|B [0-9]... 
|A [0-9][0-9]|B [0-9][0-9] and so on for three and four digits)\b"); total 1 line 

Zu dieser Zeit nach den Spielen Ich tue dies:

foreach (Match m in ForAB1) 
    { 
    //many calculations on the basis of index and length etc 
    } 

Was ich will:

foreach (Match m in ForAB1) 
    { 
    if(Match is 'A [0-9]') 
    {//many calculations on the basis of index and length etc} 
    else... 
    } 

Gibt es noch etwas einfach genug, so dass ich nicht brauchen Code einfach zu wiederholen wegen unterschiedlicher Anzahl der Ziffern? Ich suche nach allen eindeutigen Übereinstimmungen, die ich angegeben habe.

Edit: eigentliches Problem ist, ich will nicht m.len und dann prüfen, ob es A oder B ist, weil ich in Wirklichkeit mehr als dreißig solche Ausdrücke habe

+1

keine Straftat verwenden, aber wenn Sie -1 diese Frage soll es richtiger Grund dafür sein, und ich denke, Sie es hier schreiben können –

Antwort

2

Um Sie nur für A 1 stellen Sie sicher, überprüfen Typ und nicht A 11 Typ, benötigen Sie so etwas wie

foreach (Match m in ForAB1) 
{ 
    if (Regex.IsMatch(m.Value, @"^A [0-9]$")) 
    {//many calculations on the basis of index and length etc} 
    else if (Regex.IsMatch(m.Value, @"^A [0-9]{2}$")) 
    {//many calculations on the basis of index and length etc} 
    else... 
} 
+0

Vorkommen sind nicht Problem, das ich schon Habe MatchCollection, die nach so vielen Vorkommen suchen kann wie möglich. Ich suche nach allen eindeutigen Übereinstimmungen, die ich piped –

+0

Warum verwenden Sie dann '\ b'? Ich denke, Sie suchen nach '^'/'$' Ankern, wie '@"^(A [0-9] | B [0-9] ... | A [0-9] [0-9] | B [0-9] [0-9] usw. für drei und vier Ziffern) $ "' –

+0

'\ b' ist kein Problem, das funktioniert. Problem ist innerhalb 'foreach' Schleife Ich möchte eine Sache tun, wenn Übereinstimmung A1 ist und eine andere, wenn es A11 ist, ist wie' (Typ1 | Typ2) 'war innerhalb Regex und jetzt möchte ich in MatchCollection sehen, wenn ausgewählt ist type1 oder type2 –

Verwandte Themen