Wpis z mikrobloga

Witam regexpowe swiry,
Jako ze jestem leszczem w temacie, potrzebuje wyrazenie ktory dany string:

Wartosc1;Wartosc2;Wartosc3;ZnakSpecjalny=';';Wartosc4;Wartosc5;

zesplituje po ; na

1.Wartosc1
2.Wartosc2
3.Wartosc3
4.ZnakSpecjalny=';'
5.Wartosc4
6.Wartosc5
etc

Chyba, ze znacie w c# jakis bardziej elegancki sposob, ale zalezy mi zeby w miare szybko dzialalo
#programowanie #regexp #wyrazeniaregularne #dotnet #csharp
  • 14
@Crisu: Co do eleganckiego sposobu' i żeby szybko działało:
Pamiętaj, że premature optimization is the root of all evil. Regex w większości zastosowań będzie wystarczojąco szybki, a dławikiem będzie IO. Jak naprawdę potrzebujesz szybkiego parsowania to zrób sobie coś w rodzaju wykrywania indices.
pseudokod:

parse(string in) {
List result = new List();
boolean insideMarks = false;
string temp = ""
for(char c : in.chars()){
if(c=='\'') {
insideMarks = !insideMarks;
} elseif(!insideMarks&&c==';')
@maciekmm_net:

string test = "Wartosc1;Wartosc2;Wartosc3;ZnakSpecjalny=';';Wartosc4;Wartosc5;";
string[] arr = Regex.Split(test, @"([^;']*('[^']*')*)*;");

Widze ze kolega lvl 99 w regexp. Co kurna zle zrobilem, ze zwraca 14 pustych elementow :<

@lume: stronka super, moze sie przelame w wolnej chwili do tego narzedzia diabla ;)
string test = "Wartosc1;Wartosc2;Wartosc3;ZnakSpecjalny=';';Wartosc4;Wartosc5;";

string[] arr = Regex.Split(test, @"([^;']*('[^']*')*)*;");


Sprawdź to:
@Crisu:

string test = "Wartosc1;Wartosc2;Wartosc3;ZnakSpecjalny=';';Wartosc4;Wartosc5;";
string[] arr = Regex.Split(test, @"(([^;']*('[^']*')*)*);");
@lume: Zgadzam sie w 100%. Ale mam legacy apke, ktora i tak juz zamula. A doszly nowe wymagania z sufitu. Probowalem sobie ogarnac to w karkołomny sposob przez linq ale wydajosciowo zwolnilo juz na wstepnym etapie to zostaly tylko regexpy :(