Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Regex Greedy OR?

[es] :: .NET :: Regex Greedy OR?

[ Pregleda: 1183 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dontoo

Član broj: 249815
Poruke: 40
*.adsl.net.t-com.hr.



+1 Profil

icon Regex Greedy OR?04.04.2010. u 11:47 - pre 170 meseci
Kako napraviti greedy OR (|)? Ako je ovo dio string (string ima još drugih karaktera koje moram ignorirat) ...21xy32... Ja želim ubacit znak(sa razmakom) ' * ' između broja i slova \d[a-z], između slova i broja[a-z]\d i između slova i slova [a-z][a-z]
Code:
        Regex reg = new Regex(@"\d[a-z]|[a-z]\d|[a-z][a-z]");//23x   y +3xy - 34 x   y -5 x    y + 34 x y34+ x2y4
        MatchCollection matchC;
        matchC = reg.Matches(input);
        int ii = 0;
        foreach (Match element in matchC)
        {
            input = input.Insert(element.Index + ii, " * ");
            ii += 3;
        }


Ovaj kod ne funkcionira zato što regex \d[a-z]|[a-z]\d|[a-z][a-z] koristi operator | koji uvijek bira između dvije alternative. Sad kad on naiđe na 3xy trebao bi napisati 3*x*y, ali on gleda 3-x | x-y. Kako 3-x je true on više negleda drugi izbor. Kako ga napravit greedy? Da gleda ili ovo ili ono ili oba? Mučim se već sat vremena, ne mogu vjerovat da na netu nema ništa o tome.
 
Odgovor na temu

dontoo

Član broj: 249815
Poruke: 40
*.adsl.net.t-com.hr.



+1 Profil

icon Re: Regex Greedy OR?04.04.2010. u 17:22 - pre 170 meseci
Riješeno
Regex reg = new Regex(@"(\d(?=[a-z])|[a-z](?=[a-z\d]))");
 
Odgovor na temu

[es] :: .NET :: Regex Greedy OR?

[ Pregleda: 1183 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.