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

problem sa Regex-om

[es] :: Art of Programming :: problem sa Regex-om

[ Pregleda: 3247 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

manda
vladimir mandaric
Beograd

Član broj: 13840
Poruke: 29
79.101.247.*



Profil

icon problem sa Regex-om08.04.2009. u 23:10 - pre 182 meseci
Imam Regex:

<vrti>((.*\n*)+)</vrti>

Za primere tipa

<vrti>dasdasets srt bsr tb trbr </vrti>

radi ok. Problem nastaje kada imam ulazni string koji ima više pojavljivanja, npr.:

<vrti>dasdasets srt bsr tb trbr </vrti> <vrti> abcde ttt dfdgf1234,.,.<>>>> </vrti>


U ovom slučaju match-ovanje mi ne vraća 2 (...) match-aa, već samo jedan, budući da praktično ceo izraz počinje sa <vrti>, a završava sa </vrti>.

Takodje,

<vrti> abc </vrti> </vrti>


mi ne vraća "<vrti> abc </vrti>", već "<vrti> abc </vrti> </vrti>".


Ono što hoću je da mi vrati sve matcheve koji počinju sa "<vrti>", a završavaju sa "</vrti>", a da string izmedju ne sadrži nijedan od ovih krajnjih stringova. Drugim rečima, hteo bih da negiram pojavljivanje celog jednog stringa (nije problem sa jednim karakterom (^), ali kako da negiram pojavljivanje celog stringa)

Ima li neko rešenje?
manda
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: problem sa Regex-om08.04.2009. u 23:26 - pre 182 meseci
pogledaj lookahead assertion.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: problem sa Regex-om09.04.2009. u 09:45 - pre 182 meseci
mislim da je ovde krace resenje lazy quantifier, mada bi mozda lookahead assertion imao manje koraka posto lazy quantifier backtrackuje posle svakog karaktera.

<vrti>(.*?)</vrti>


PS: umesto (.*\n*)+ koristi .* sa ukljucenim s (Singleline) flegom, taj fleg tretira \n kao normalan karakter (. ga matchuje). Brze je jer ima manje petlji da matchuje.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: problem sa Regex-om09.04.2009. u 10:01 - pre 182 meseci
Nije, probao sam sa lookahead i ima vise koraka za isti ulaz, brzi je lazy quantifier.

<vrti>(.(?<!</vrti>))*</vrti>


A i ovo je za AoP, enma veze sa .NETom...
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

vbvlada
Petrović Vladimir
Beograd

Član broj: 59233
Poruke: 209
*.viser.edu.rs.



Profil

icon Re: problem sa Regex-om12.02.2010. u 12:14 - pre 172 meseci
Iskoristio bih ovu temu da probam da rešim moj problem koji je jako sličan, ali ne znam zašto mi ne radi...

Konkretno radim sa word dokumentom snimljenim u XML i imam jednu tabelu koja ima 1 row kao zaglavlje, koje je inače posebno formatirano,
a ispod tog reda mi je jedan sample row, pomoću kojeg kopiranjem stringa želim da napravim još N redova, koji su istog formatiranja.
To bi mi kasnije omogućilo lakšu izmenu ako se promene formatiranja.

Problem, koji je jako sličan ovom: hoću da izvučem taj sample row koji izgleda ovako:
Code:
<w:tr ...brdo atributa ...>... brdo tagova... </w:tr>


probao sam sa ovim:
Code:
<vrti>(.*?)</vrti>
ali mi vraca samo taj prvi red koji mi ne treba vec mi treba red ispod njega.

Način na koji bih prepoznao red je da sam u ćelije kao podatke stavio nešto tipa #1,1# (row=1, col=1).

Ali evo ovaj kod mi ne vraća to što tražim;

Code:
string toTest = reader.ReadToEnd();

            Regex r = new Regex(@"<w:tr(.*)</w:tr>");
            Match match = r.Match(toTest);
            string rr = match.ToString();
            //MessageBox.Show(rr);
            //textBox1.Text = rr;
            string rez = "";
            foreach (Group g in match.Groups)
            {
                if (!g.Value.Contains("#1,"))
                    continue;
                rez = g.Value;
            }
            textBox1.Text = rez;


Moguće je da sam pogrešno razumeo Groups svojstvo, mislio sam da je tu niz match-ova..

[Ovu poruku je menjao vbvlada dana 12.02.2010. u 13:26 GMT+1]
A vi,kako 'te?
 
Odgovor na temu

[es] :: Art of Programming :: problem sa Regex-om

[ Pregleda: 3247 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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