Problem z Regex.Replace

0

Tworzę program który przerabia pewne pliki na XML niestety natknąłem się na problem który wg. mnie nie powinien w ogóle istnieć..

Fragment mojego programu:

                    temp = liniePliku.First();
                    liniePliku.Remove(liniePliku.First());

                    MessageBox.Show("1. "+temp);
                    wynik = temp.Substring(temp.IndexOf('=')-1).TrimStart();
                    MessageBox.Show("2. "+ wynik + nazwa);
                    nazwa = Regex.Replace(temp, wynik, "");
                    MessageBox.Show("3. " + nazwa + wynik);
                    wynik = temp.Substring(temp.IndexOf('=') + 1).TrimStart();
 

(MessageBoxy w celu testowania).

Przykład kawałku tekstu na którym działa:

EPG = pol,"Czas na Konin","Serwis informacyjny powiatu koniñskiego. Aktualne wiadomo¶ci o wydarzeniach spo³ecznych, kulturalnych i sportowych ze wszystkich miast i gmin powiatu.",T;

Przykład problematycznego kawałku tekstu:

EPG = pol,"Dzieñ Dobry Wielkopolsko", "W pierwszej czê¶ci(godzinie)magazynu prezentujemy g³ówne wydanie Ekspresu Wielkopolski, zawieraj±ce najwa¿niejsze informacje z gmin i powiatów Wielkopolski. W drugiej czê¶ci(godzinie)zapraszamy na spotkania z ciekawymi ludŸmi, przedstawiamy relacje z interesuj±cych wydarzeñ kulturalnych, sportowych i spo³ecznych.","Magazyn Informacyjno – publicystyczny."T;

Nie wiem czy problemem tutaj jest długość tego tekstu? O ile w każdym innym przypadku Regex.Replace działa, tak w tym nie widzi jakby tej części wspólnej i nic nie usuwa. Nie mam żadnego pomysłu przez co to nie działa i mnie to zaczyna denerwować... Ma ktoś może jakiś pomysł?

Jako, że to mój pierwszy post tutaj przepraszam jeśli popełniłem jakiś błąd, i dzięki za wszelkie pomysły;)

1

Regex nie służy do takich operacji, bo nie kontrolujesz specjalnych dla regex znaków, które mogą wystąpić w tekście - np. kropka, gwiazdka, znak zapytania, nawias itp. Zgaduję, że psuje Ci tutaj nawias.
Użyj string.Replace(). Nie tylko nie będzie problemu ze znakami kontrolującymi, ale i będzie działać kilkadziesiąt do kilku tysięcy razy szybciej.

PS Do debugowania (bo testowanie to trochę co innego) programu służy debugger -> http://4programmers.net/History/C_sharp/Artyku%C5%82y/Debugowanie.

0

Hmm, nie wiedziałem, że regex zwraca uwagę na to co występuje w tekście, po zmianie na string.Replace() i poprawie paru błędów wreszcie działa:D
Mógłbym zapytać w takim razie, kiedy dobrze jest używać Regex.Replace?

Dzięki wielkie:)

PS. Debugger cholernie pomaga;p Głupie przyzwyczajenia z czasów c++ i pisania w jakiś notatnikach;p

1

Regex służy do wyszukiwania wzorców w tekście. Może sprawdzić, czy tekst zawiera dany wzorzec, np. czy email albo adres strony http://en.wikipedia.org/wiki/Regular_expressionodmienić na inny pasujący do wzorca tekst. Więcej -> wiki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1