• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

RegEx C# wyszukiwanie określonej grupy.

Konkurs Mistrz Programowania
0 głosów
451 wizyt
pytanie zadane 2 marca 2020 w C# przez Babbage Obywatel (1,630 p.)
edycja 3 marca 2020 przez Babbage

Witam, 

Chciałbym się dowiedzieć dlaczego nie mogę dopasować wyrażenia regularnego do przykładowego ciągu znaków.

Interesuje mnie grupa 2.

Na stronie regex101 wstawiłem przykład.

Proszę o wsparcie.

 


string input = @"nazwa     plik     rozmiar\nprogra    exe      3560k\nobraz     gif      500k\nobraz1    gif      500k\nobraz2    gif      1500k\nobraz3    gif      2500k\nobraz4    gif      3500k\ntekst     txt      20k\n--------------------------\n";
string patern = @"(nazwa.*rozmiar\n)([\s\w\n]*)([-]{26})";
Regex reg = new Regex(patern, RegexOptions.Singleline);
MatchCollection mc = reg.Matches(input);

if (reg.IsMatch(input))
{
   string tmp = mc[2].Value; 
}

Pozdrawiam.

komentarz 3 marca 2020 przez Babbage Obywatel (1,630 p.)
edycja 3 marca 2020 przez Babbage

pierwszy blad:

string input = @"nazwa     plik     rozmiar\nprogra    exe      3560k\nobraz     gif      500k\nobraz1    gif      500k\nobraz2    gif      1500k\nobraz3    gif      2500k\nobraz4    gif      3500k\ntekst     txt      20k\n--------------------------\n";

usunięcie prefiksu @ - przez co znaki sekwencji były źle interpretowane.

string input = "nazwa     plik     rozmiar\nprogra    exe      3560k\nobraz     gif      500k\nobraz1    gif      500k\nobraz2    gif      1500k\nobraz3    gif      2500k\nobraz4    gif      3500k\ntekst     txt      20k\n--------------------------\n";

Ale nadal nie dopasowuje grup.

1 odpowiedź

0 głosów
odpowiedź 3 marca 2020 przez Babbage Obywatel (1,630 p.)
edycja 3 marca 2020 przez Babbage

Drugi błąd to złe rozpakowanie wyniku.

W kolekcji dopasowań znajduje się jedno dopasowanie z kilkoma grupami. 

Poniżej przykłady:

string input = "nazwa     plik     rozmiar\nprogra    exe      3560k\nobraz     gif      500k\nobraz1    gif      500k\nobraz2    gif      1500k\nobraz3    gif      2500k\nobraz4    gif      3500k\ntekst     txt      20k\n--------------------------\n";
string patern = @"(?<pierwsza>nazwa.*rozmiar\n)(?<druga>[\s\w\n]*)(?<trzecia>[-]{26})";
Regex reg = new Regex(patern);

//jedno dopasowanie
Match match = reg.Match(input);

//dostep do grupy po nazwie i indeksie
Console.WriteLine(match.Groups["druga"]);
Console.WriteLine(match.Groups[2]);

//petla po wszystkich grupach w dopasowaniu
GroupCollection gc = match.Groups;
foreach (Group group in gc)
{
    Console.WriteLine(group.Value);
}

//kolekcja dopasowan
MatchCollection mc = reg.Matches(input);

//petla po wszystkich dopasowaniach
foreach (Match m in mc)
{
    //dostep do grupy po nazwie i indeksie
    Console.WriteLine(m.Groups["druga"]);
    Console.WriteLine(m.Groups[2]);

    //petla po wszystkich grupach w dopasowaniu
    GroupCollection gc2 = m.Groups;
    foreach (Group group in gc2)
    {
        Console.WriteLine(group.Value);
    }
}

 

Podobne pytania

0 głosów
1 odpowiedź 404 wizyt
pytanie zadane 8 stycznia 2017 w C# przez LODosafka Początkujący (310 p.)
0 głosów
1 odpowiedź 467 wizyt
pytanie zadane 20 października 2016 w C# przez Rout Bywalec (2,350 p.)
+1 głos
1 odpowiedź 346 wizyt
pytanie zadane 6 listopada 2020 w Systemy operacyjne, programy przez MrJ_ Nowicjusz (200 p.)

93,653 zapytań

142,574 odpowiedzi

323,089 komentarzy

63,169 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...