-
1. Data: 2012-10-03 13:15:24
Temat: WR #2
Od: "R.e.m.e.K" <g...@d...null>
Witam
Ponownie prosze o pomoc z wyrazeniem regularnym. Prosze tez o wybaczenie,
ale dopiero temat ogarniam, wiec troche bladze.
Otoz mam tekst np. SLOWO.67.45.2 gdzie stala czesc to SLOWO i kropki, a
pomiedzy kropkami sa rozne liczby i jest ich czasem wiecej czasem mniej (co
oznacza ze i kropek moze byc rozna liczba a zatem dopuszczalne sa i takie
teksty: SLOWO.45).
I chce teraz wyciagnac te liczby, wiec stosuje wyrazenie:
(?:([0-9]+)[.]*?)+
i mam w grupach liczby, jest ok. Ale zalezy mi tez by jednoczesnie
zweryfikowac czy SLOWO jest prawidlowe i czy jest slowem np. KOLUMNA, pisze
zatem wyrazenie:
KOLUMNA\.(?:([0-9]+)[.]*?)+
no i tu zaczynaja sie schody, bo teraz co prawda tekst sie weryfikuje jako
zgodny z maska, ale grupe mam tylko jedna i w niej pierwsza liczbe, choc
liczb jest wiecej:
KOLUMNA.12.345.1
Jak uwzglednic SLOWO by wyrazenie nadal wyciagalo liczby, ale jednoczesnie
weryfikowalo czy na poczatku jest slowo zgodne z podanym wyrazeniem?
--
pozdro
R.e.m.e.K
-
2. Data: 2012-10-03 19:12:02
Temat: Re: WR #2
Od: Andrzej Jarzabek <a...@g...com>
On 03/10/2012 12:15, R.e.m.e.K wrote:
>
> KOLUMNA\.(?:([0-9]+)[.]*?)+
>
> no i tu zaczynaja sie schody, bo teraz co prawda tekst sie weryfikuje jako
> zgodny z maska, ale grupe mam tylko jedna i w niej pierwsza liczbe, choc
> liczb jest wiecej:
>
> KOLUMNA.12.345.1
>
> Jak uwzglednic SLOWO by wyrazenie nadal wyciagalo liczby, ale jednoczesnie
> weryfikowalo czy na poczatku jest slowo zgodne z podanym wyrazeniem?
Twoim problemem nie jest to słowo na początku, tylko fakt, że grupy są
po prostu przypisane do par nawiasów w wyrażeniu. Pierwsza grupa to
pierwsza para nawiasów i nie da się uchwycić zmiennej ilości grup, po
prostu. Nie wiem w jakim kontekście używasz tych wyrażeń, ale żeby
zrobić to, co chcesz, musisz odciąć najpierw słowo (bądź to wyrażeniem
regularnym, bądź prostszym środkiem), a następnie użyć funkcjonalności
robijającej ci stringa na danym znaku/ciągu/wzorcu - jakieś split czy
coś w tym stylu, w zależności jakiego języka jakiego używasz - jeśli C++
to boost::split.
-
3. Data: 2012-10-03 19:22:00
Temat: Re: WR #2
Od: "M.M." <m...@g...com>
W dniu środa, 3 października 2012 13:15:26 UTC+2 użytkownik R.e.m.e.K napisał:
> Witam
> KOLUMNA\.(?:([0-9]+)[.]*?)+
wyszukaj( text ) {
if( text nie zaczyna sie od 'KOLUMNA' )
return false;
pozycja = dlugosc('KOLUMNA');
regexp = "\.(\d+)"; // nie zapomnij poprawki na jezyk i dialekt wyrazen
lista = pusta;
while( wyszukaj_od_pozycji( text , regexp , pozycja , out ) ) {
lista.dodaj( substring( out , 1 ) );
pozycja += strlen(out);
}
return lista;
}