C# Regex třída - pomoc při odladění regulálního výrazu, který jinde funguje

Giovanna

Dobrý den, chtěl jsem poprosit o pomoc. Dělám na věci, kde máme naše lokální customizované API a z generovaného přebíráme modelové třídy a enumy. Toto updatování se snažím automatizovat. Nyní konkrétně jsem chtěl rozparsovat enum pomocí regulálního výrazu, protože je to nejjednodužší, ovšem jsem narazil. Vytvořil jsem regex a odladil ho pomocí online nástrojů. Funguje. Vrací mi od matche s indexem 2 hodnoty enumu až po poslední. Problém nastal, když jsem tento regex napsal do CSharpového kódu, kde vrací pouze jeden match a tím je prázdný string. Potřeboval bych poradit, nakopnout, kde by mohla být chyba. Posílám můj kód, děkuju.

kontent pro parsování:

Kód: [Vybrat]
                var sourceContent = @" public enum Category

                {
                    aaa, bbb, ccc, ddd, eee, fff, ggg
                }
                ";

regulalni vyraz, ktery jinde funguje:

var enumRegex = "public\\senum\\s" + "Category" + "\\s+[{]\\s+|(\\w+)";

Giovanna


Giovanna

:-( až teď jsem si v online nástroji všimnul, že se všechny položky enumu strkají do pořád stějné groupy jedna, takže je špatně ten regulární výraz.

Co ale nevím, jak to tedy naparsovat co hodnota enumu to groupa.

Máte s tím prosím někdo zkušenost?

NooN

Ten regularny vyraz funguje aj v NET, tak ako ho mas napisany (aj ked nie tak ako by mal byt na to aby ti vratil len polozky) a od indexu 1 vracia tto co potrebujes

Giovanna

Právě že ne, mapuje všechny položky enumu na index 1, takže je nevyčtu v důsledku.:-(

NooN

Kód: [Vybrat]
                var enumRegex = "public\\senum\\s" + "Category" + "\\s+[{]\\s+|(?<G>\\w+)";
                var req = new Regex(enumRegex, RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
                var matchCol = req.Matches(sourceContent);
                if (matchCol != null
                    && matchCol.Count > 0)
                {
                    foreach (Match match in matchCol)
                    {
                        var k = match.Groups["G"].Value;
                    }
                }