"Jim Lewis" <[EMAIL PROTECTED]> writes:

>Anyone have experience with string pattern matching?
>I need a fast way to match variables to strings. Example:

>string - variables
>============
>abcaaab - xyz
>abca - xy
>eeabcac - vxw

>x matches abc
>y matches a
>z matches aab
>w maches ac
>v maches ee

Off topic I know but I've been learning snobol pattern matching recently so I
thought I'd give this one a bash.  Here is my effort:

        define('foo(str)')
        &fullscan = 1
        '/abcaaab/abca/eeabcac/' '/' arb $ x arb $ y arb $ z '/' *x *y '/'
+                arb $ v *x arb $ w '/' *foo(v '/' w '/' x '/' y '/' z) :F(end)
foo     output = str     :(FRETURN)

end

Good eh?  Here's the output:

/eeabcac//abca/aab
e/eabcac//abca/aab
ee/abcac//abca/aab
eea/bcac//abca/aab
eeab/cac//abca/aab
eeabc/ac//abca/aab
eeabca/c//abca/aab
eeabcac///abca/aab
ee/bcac/a/bca/aab
eeabc/c/a/bca/aab
ee/cac/ab/ca/aab
ee/ac/abc/a/aab
ee/c/abca//aab

Removing empty entries is quite easy:

        '/abcaaab/abca/eeabcac/' '/' arb $ x arb $ y arb $ z '/' *x *y '/'
+                arb $ v *x arb $ w '/' *differ(v) *differ(w) *differ(x)
+                *differ(y) *differ(z) *foo(v '/' w '/' x '/' y '/' z) :F(end)

generates:

ee/bcac/a/bca/aab
eeabc/c/a/bca/aab
ee/cac/ab/ca/aab
ee/ac/abc/a/aab

If I get time I'll try to get this working in Sam Wilmott's Python pattern
matching library.

What fun!

Eddie
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to