Thread View: pl.comp.lang.tcl
12 messages
12 total messages
Started by koctyxa
Mon, 27 Feb 2006 09:45
regexp bez podsłów
Author: koctyxa
Date: Mon, 27 Feb 2006 09:45
Date: Mon, 27 Feb 2006 09:45
16 lines
951 bytes
951 bytes
Potrzebuję regexpa do zamiany słowa, ale nie podsłowa, czyli bb -> xx ale aabb -> aabb, bbcc -> bbcc, aabbcc -> aabbcc. Ponoć w perlu wystarczyłoby z przodu i z tyłu wyrażenia zapodać \b. Jak to w tcl-u? koctyxa
Re: regexp bez podsłów
Author: Googie
Date: Mon, 27 Feb 2006 12:08
Date: Mon, 27 Feb 2006 12:08
26 lines
1291 bytes
1291 bytes
koctyxa wrote: > > > Potrzebuję regexpa do zamiany słowa, ale nie podsłowa, czyli > > bb -> xx > > ale > > aabb -> aabb, > bbcc -> bbcc, > aabbcc -> aabbcc. > > Ponoć w perlu wystarczyłoby z przodu i z tyłu wyrażenia zapodać \b. > Jak to w tcl-u? > > koctyxa Może podmieniaj " bb " na " xx " zamiast samo "bb" :) Wtedy będzie łatwiej, bo regexp będzie: \sbb\s -- Pozdrawiam! (Greetings!) Googie
Re: regexp bez podsłów
Author: koctyxa
Date: Mon, 27 Feb 2006 12:16
Date: Mon, 27 Feb 2006 12:16
9 lines
1029 bytes
1029 bytes
> Może podmieniaj " bb " na " xx " zamiast samo "bb" :) Wtedy będzie > łatwiej, bo regexp będzie: > \sbb\s Ale to może być np. "(bb)", "bb*cc", "//bb" itp., gdzie te wszystkie znaki nie są metaznakami. koctyxa
Re: regexp bez podsłów
Author: Googie
Date: Mon, 27 Feb 2006 14:49
Date: Mon, 27 Feb 2006 14:49
16 lines
1436 bytes
1436 bytes
koctyxa wrote: > >> Może podmieniaj " bb " na " xx " zamiast samo "bb" :) Wtedy będzie >> łatwiej, bo regexp będzie: >> \sbb\s > > Ale to może być np. "(bb)", "bb*cc", "//bb" itp., gdzie te wszystkie > znaki nie są metaznakami. Nie jestem aż takim guru jeśli chodzi o regexp, ale ja bym to zrobił używając [string first], a następnie sprawdzając znaki: przed ([string first]-1), oraz po znalezionym wyrazie ([string first]+[string length]+1). -- Pozdrawiam! (Greetings!) Googie
Re: regexp bez podsłów
Author: koctyxa
Date: Mon, 27 Feb 2006 14:57
Date: Mon, 27 Feb 2006 14:57
8 lines
1046 bytes
1046 bytes
>> Ale to może być np. "(bb)", "bb*cc", "//bb" itp., gdzie te wszystkie >> znaki nie są metaznakami. > [string first] Hm..., to by się nadało... koctyxa
Re: regexp bez podsłów
Author: Wojciech Kocjan
Date: Mon, 27 Feb 2006 17:52
Date: Mon, 27 Feb 2006 17:52
19 lines
1300 bytes
1300 bytes
On Mon, 27 Feb 2006 10:45:42 +0100, koctyxa <jaq@costam.artemida.amu.edu.pl> wrote: > Potrzebuję regexpa do zamiany słowa, ale nie podsłowa, czyli > > bb -> xx > > ale > > aabb -> aabb, > bbcc -> bbcc, > aabbcc -> aabbcc. > > Ponoć w perlu wystarczyłoby z przodu i z tyłu wyrażenia zapodać \b. > Jak to w tcl-u? Chyba chodziło o \s - czyli "\\sbb\\s" w tym przypadku :) -- WK
Re: regexp bez podsłów
Author: Googie
Date: Mon, 27 Feb 2006 18:09
Date: Mon, 27 Feb 2006 18:09
11 lines
1265 bytes
1265 bytes
Wojciech Kocjan wrote: > Chyba chodziło o \s - czyli "\\sbb\\s" w tym przypadku :) Tylko że wtedy zamieni " xx " na "bb" = utnie spacje/taby. Poza tym koctyxa napisał że chodzi też o '()', itp. Z tego na ile znam regexpa w Tcl, to nie ma takiego operatora, który spełniałby te wymogi, ale moge się mylić. -- Pozdrawiam! (Greetings!) Googie
Re: regexp bez podsłów
Author: Wojciech Kocjan
Date: Mon, 27 Feb 2006 18:20
Date: Mon, 27 Feb 2006 18:20
43 lines
2061 bytes
2061 bytes
On Mon, 27 Feb 2006 19:09:36 +0100, Googie <no@spam.org> wrote:
> Wojciech Kocjan wrote:
>> Chyba chodziło o \s - czyli "\\sbb\\s" w tym przypadku :)
>
> Tylko że wtedy zamieni " xx " na "bb" = utnie spacje/taby. Poza tym
> koctyxa napisał że chodzi też o '()', itp. Z tego na ile znam regexpa w
> Tcl, to nie ma takiego operatora, który spełniałby te wymogi, ale moge
> się mylić.
No tak, ale może coś tego typu:
proc escapeRegexp {string} {
set escape "\[\]\{\}\(\)\\.+-*"
set rc ""
foreach char [split $string ""] {
if {[string first $char $escape] >= 0} {
append rc \\
}
append rc $char
}
return $rc
}
set from "xx"
set to "bb"
set text "ala ma xx kota xxy xx"
regsub -all "(^|\\s)[escapeRegexp $from](\\s|\$)" $text "\\1${to}\\2"
Jest też inna możliwość.
set word(xx) bb
set rc ""
foreach {- before word after} [regexp -all -inline \
"(^|\\s)(\\w*?)(\\s|\$)" $text] {
catch {set word $replace($word)}
append rc $before $word $after
}
--
WK
Re: regexp bez podsłów
Author: Googie
Date: Mon, 27 Feb 2006 18:38
Date: Mon, 27 Feb 2006 18:38
40 lines
1870 bytes
1870 bytes
Wojciech Kocjan wrote:
> No tak, ale może coś tego typu:
>
> proc escapeRegexp {string} {
> set escape "\[\]\{\}\(\)\\.+-*"
> set rc ""
> foreach char [split $string ""] {
> if {[string first $char $escape] >= 0} {
> append rc \\
> }
> append rc $char
> }
> return $rc
> }
>
> set from "xx"
> set to "bb"
> set text "ala ma xx kota xxy xx"
>
> regsub -all "(^|\\s)[escapeRegexp $from](\\s|\$)" $text "\\1${to}\\2"
Nie wiedziałem że tak można :) Fajne.
> Jest też inna możliwość.
>
> set word(xx) bb
>
> set rc ""
> foreach {- before word after} [regexp -all -inline \
> "(^|\\s)(\\w*?)(\\s|\$)" $text] {
> catch {set word $replace($word)}
> append rc $before $word $after
> }
Ten zapis mnie rozłożył na łopatki. Gdybym znał to wczesniej... Tyle
pracy :/
--
Pozdrawiam! (Greetings!)
Googie
Re: regexp bez podsłów
Author: Stachu 'Dozzie' K.
Date: Mon, 27 Feb 2006 20:43
Date: Mon, 27 Feb 2006 20:43
22 lines
1322 bytes
1322 bytes
On 27.02.2006, koctyxa <jaq@costam.artemida.amu.edu.pl> wrote: > > > Potrzebuję regexpa do zamiany słowa, ale nie podsłowa, czyli > > bb -> xx > > ale > > aabb -> aabb, > bbcc -> bbcc, > aabbcc -> aabbcc. > > Ponoć w perlu wystarczyłoby z przodu i z tyłu wyrażenia zapodać \b. Jak > to w tcl-u? A co na to mówi `man re_syntax', który można znaleźć w sekcji SEE ALSO `man regexp'? Mnie powiedział o \< i \>. -- Feel free to correct my English Stanislaw Klekot
Re: regexp bez podsłów
Author: Stachu 'Dozzie' K.
Date: Mon, 27 Feb 2006 20:55
Date: Mon, 27 Feb 2006 20:55
22 lines
1390 bytes
1390 bytes
On 27.02.2006, koctyxa <jaq@costam.artemida.amu.edu.pl> wrote: > > > Potrzebuję regexpa do zamiany słowa, ale nie podsłowa, czyli > > bb -> xx > > ale > > aabb -> aabb, > bbcc -> bbcc, > aabbcc -> aabbcc. > > Ponoć w perlu wystarczyłoby z przodu i z tyłu wyrażenia zapodać \b. Jak > to w tcl-u? A co na to mówi `man re_syntax', który można znaleźć w sekcji SEE ALSO `man regexp'? Mnie powiedział o [[:<:]] i [[:>:]]. -- Feel free to correct my English Stanislaw Klekot
Re: regexp bez podsłów
Author: Mirosław Kosmala
Date: Sat, 04 Mar 2006 11:20
Date: Sat, 04 Mar 2006 11:20
23 lines
1620 bytes
1620 bytes
Googie wrote:
>
>> Jest też inna możliwość.
>>
>> set word(xx) bb
>>
>> set rc ""
>> foreach {- before word after} [regexp -all -inline \
>> "(^|\\s)(\\w*?)(\\s|\$)" $text] {
>> catch {set word $replace($word)}
>> append rc $before $word $after
>> }
>
> Ten zapis mnie rozłożył na łopatki. Gdybym znał to wczesniej... Tyle
> pracy :/
>
Nie tylko ciebie dobił tą pętelką ;-))))))))
--
Miroslaw Kosmala mail-to:miroslaw.kosmala(|)trilowcy.org
Linux User:#197007 root:$1$ueQ1d75z$NlDhu6oQhfUpmBlnKTDpj0:
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads