-
1. Data: 2014-04-04 09:55:09
Temat: wyrazenie regularne - find and replace
Od: z...@g...com
hej,
mam problem z wyrazeniem regularnym. Text do obrobki:
--------
:X
:59:/435354
sfds
safasaf
fgdf
:70:TEXT
:71A:S
jakies dziadostwo
:67:dsfsdsf
sfddsf
:59:/HU434
CB 3
44, 33
:7 a
-------
Zadaniem jest aby entery w takich zaznacoznych obszarach byly zamienione na np.
wykrzyknik.
Wyprodukowalem takie rozwiazanie:
text do znalezienia: (:59:.*?.)\r\n(.*?)\r\n(.*?)\r\n:
text do zmaiany: \1!\2!\3!:
ale niestety w ten sposob jest hardcodem lista linii w polu 59. Tymczasem moze byc
ich dwie a moze piec.
Poprosze o jakas pomoc.
zlotawy
-
2. Data: 2014-04-04 11:37:04
Temat: Re: wyrazenie regularne - find and replace
Od: g...@g...com
W dniu piątek, 4 kwietnia 2014 09:55:09 UTC+2 użytkownik z...@g...com napisał:
>
> Wyprodukowalem takie rozwiazanie:
> text do znalezienia: (:59:.*?.)\r\n(.*?)\r\n(.*?)\r\n:
> text do zmaiany: \1!\2!\3!:
>
> ale niestety w ten sposob jest hardcodem lista linii
> w polu 59. Tymczasem moze byc ich dwie a moze piec.
>
> Poprosze o jakas pomoc.
chyba najprosciej uzyc asercji [1]:
s/\r\n(?!:\d+:)/!/sg
[1] http://perldoc.perl.org/perlre.html#Look-Around-Asse
rtions
-
3. Data: 2014-04-04 14:15:25
Temat: Re: wyrazenie regularne - find and replace
Od: z...@g...com
W dniu piątek, 4 kwietnia 2014 11:37:04 UTC+2 użytkownik g...@g...com napisał:
> W dniu piątek, 4 kwietnia 2014 09:55:09 UTC+2 użytkownik z...@g...com napisał:
>
> >
>
> > Wyprodukowalem takie rozwiazanie:
>
> > text do znalezienia: (:59:.*?.)\r\n(.*?)\r\n(.*?)\r\n:
>
> > text do zmaiany: \1!\2!\3!:
>
> >
>
> > ale niestety w ten sposob jest hardcodem lista linii
>
> > w polu 59. Tymczasem moze byc ich dwie a moze piec.
>
> >
>
> > Poprosze o jakas pomoc.
>
>
>
> chyba najprosciej uzyc asercji [1]:
>
>
>
> s/\r\n(?!:\d+:)/!/sg
>
>
>
>
>
> [1] http://perldoc.perl.org/perlre.html#Look-Around-Asse
rtions
a w notepad++ jakby to wygladalo?
-
4. Data: 2014-04-04 15:05:45
Temat: Re: wyrazenie regularne - find and replace
Od: g...@g...com
W dniu piątek, 4 kwietnia 2014 14:15:25 UTC+2 użytkownik z...@g...com napisał:
> > > Poprosze o jakas pomoc.
> >
> > chyba najprosciej uzyc asercji [1]:
> >
> > s/\r\n(?!:\d+:)/!/sg
> >
>
> a w notepad++ jakby to wygladalo?
nie wiem czy notepad++ obsługuje asercje, ale jeśli tak, to:
zamień
\r\n(?!:\d+:)
na
!
-
5. Data: 2014-04-05 10:35:49
Temat: Re: wyrazenie regularne - find and replace
Od: z...@g...com
W dniu piątek, 4 kwietnia 2014 15:05:45 UTC+2 użytkownik g...@g...com napisał:
> W dniu piątek, 4 kwietnia 2014 14:15:25 UTC+2 użytkownik z...@g...com napisał:
>
>
>
> > > > Poprosze o jakas pomoc.
>
> > >
>
> > > chyba najprosciej uzyc asercji [1]:
>
> > >
>
> > > s/\r\n(?!:\d+:)/!/sg
>
> > >
>
> >
>
> > a w notepad++ jakby to wygladalo?
>
>
>
> nie wiem czy notepad++ obsługuje asercje, ale jeśli tak, to:
>
>
>
> zamień
>
> \r\n(?!:\d+:)
>
> na
>
> !
nie znajduje nawet /sg w notepad+
-
6. Data: 2014-04-05 10:46:30
Temat: Re: wyrazenie regularne - find and replace
Od: g...@g...com
W dniu sobota, 5 kwietnia 2014 10:35:49 UTC+2 użytkownik z...@g...com napisał:
>
> > nie wiem czy notepad++ obsługuje asercje, ale jeśli tak, to:
> >
> > zamień
> > \r\n(?!:\d+:)
> > na
> > !
>
> nie znajduje nawet /sg w notepad+
/sg to tylko przelaczniki dla perla/pcre: s oznacza, zeby dopasowywal
wiele linii, a nie pojedyncza linie, natomiast g oznacza, zeby zamienil
wszystkie wystapienia patternu, a nie tylko pierwsze. W notepadzie++
pierwsza opcja jest domyslna, a druga odpowiada kliknieciu "zamien wszystkie
wystapienia".
natomiast sprawdzilem, i jezeli wpiszesz w notepadzie++,
zeby zamienil wyrazenie regularne "\r\n(?!:\d+:)" na "!"
na podanym przez Ciebie tekscie, to zachowa sie nalezycie
(o ile wlasciwie zrozumialem Twoja intencje)
-
7. Data: 2014-04-05 15:39:07
Temat: Re: wyrazenie regularne - find and replace
Od: z...@g...com
W dniu sobota, 5 kwietnia 2014 10:46:30 UTC+2 użytkownik g...@g...com napisał:
> W dniu sobota, 5 kwietnia 2014 10:35:49 UTC+2 użytkownik z...@g...com napisał:
>
> >
>
> > > nie wiem czy notepad++ obsługuje asercje, ale jeśli tak, to:
>
> > >
>
> > > zamień
>
> > > \r\n(?!:\d+:)
>
> > > na
>
> > > !
>
> >
>
> > nie znajduje nawet /sg w notepad+
>
>
>
> /sg to tylko przelaczniki dla perla/pcre: s oznacza, zeby dopasowywal
>
> wiele linii, a nie pojedyncza linie, natomiast g oznacza, zeby zamienil
>
> wszystkie wystapienia patternu, a nie tylko pierwsze. W notepadzie++
>
> pierwsza opcja jest domyslna, a druga odpowiada kliknieciu "zamien wszystkie
>
> wystapienia".
>
>
>
>
>
> natomiast sprawdzilem, i jezeli wpiszesz w notepadzie++,
>
> zeby zamienil wyrazenie regularne "\r\n(?!:\d+:)" na "!"
>
> na podanym przez Ciebie tekscie, to zachowa sie nalezycie
>
> (o ile wlasciwie zrozumialem Twoja intencje)
hmmm no nie za specjalnie..
intencja jest aby zamieniac tylko te konce linii ktore sa pomiedzy :59: a pierwszym
dwukropkiem nastepujacym pozniej.
-
8. Data: 2014-04-06 22:53:07
Temat: Re: wyrazenie regularne - find and replace
Od: z...@g...com
hej,
doszedlem do czego takiego:
(:59:.*?.)(\r\n)(.*?)(\r\n)(.*?)(\r\n)?(.*?)(\r\n)?(
.*?)(\r\n)?(:){1}
i zamiana
\1\3\5\7\9:
czyli wyszukuje od 2 do 5 linii. Dwie sa obowiazkowe. Reszta opcjonalnie.
Czyli dalem znak zapytania po \r\n dla ostatnich trzech linii.
no i nie dziala usuwanie tych opcjonalnych enterow. usuwanie obowiazkowych dziala
dobrze.
moze cos tam brakuje jakiegos znaczka?
zlotawy