need help of regular expression genius
Anthra Norell
anthra.norell at tiscalinet.ch
Wed Aug 2 17:25:48 EDT 2006
Harald,
This works. 's' is your SQL sample.
>>> import SE # From the Cheese Shop with a good manual
>>> Split_Marker = SE.SE (' ";=\<split here>" "~\$_?\$(.|\n)*?\$_?\$~==" ')
>>> s_with_split_marks = Split_Marker (s)
>>> s_split = s_with_split_marks.split ('<split here>')
That's it! And it isn't as complicated as it looks. The first expressions says translate the semicolon to your split mark. The
second expression finds the $-blocks and says translate them to themselves. So they don't change. You can add as many expressions as
you want. You'd probably want to choose a more convenient split mark.
Frederic
----- Original Message -----
From: "GHUM" <haraldarminmassa at gmail.com>
Newsgroups: comp.lang.python
To: <python-list at python.org>
Sent: Wednesday, August 02, 2006 5:27 PM
Subject: need help of regular expression genius
> I need to split a text at every ; (Semikolon), but not at semikolons
> which are "escaped" within a pair of $$ or $_$ signs.
>
> My guess was that something along this should happen withing csv.py;
> but ... it is done within _csv.c :(
>
> Example: the SQL text should be splitted at "<split here>" (of course,
> those "split heres" are not there yet :)
>
> set interval 2;
> <split here>
> CREATE FUNCTION uoibcachebetrkd(bigint, text, text, text, text, text,
> timestamp without time zone, text, text) RETURNS integer
> AS $_$
> DECLARE
> result int4;
> BEGIN
> update bcachebetrkd set
> name=$2, wieoftjds=$3, letztejds=$4, njds=$5,
> konzern=$6, letztespeicherung=$7, betreuera=$8, jdsueberkonzern=$9
> where id_p=$1;
> IF FOUND THEN
> result:=-1;
> else
> insert into bcachebetrkd (
> id_p, name, wieoftjds, letztejds, njds, konzern,
> letztespeicherung, betreuera, jdsueberkonzern
> )
> values ($1, $2, $3, $4, $5, $6, $7, $8, $9);
> result:=$1;
> END IF;
> RETURN result;
> END;
> $_$
> LANGUAGE plpgsql;
> <split here>
> CREATE FUNCTION set_quarant(mylvlquarant integer) RETURNS integer
> AS $$
> BEGIN
> perform relname from pg_class
> where relname = 'quara_tmp'
> and case when has_schema_privilege(relnamespace, 'USAGE')
> then pg_table_is_visible(oid) else false end;
> if not found then
> create temporary table quara_tmp (
> lvlquara integer
> );
> else
> delete from quara_tmp;
> end if;
>
> insert into quara_tmp values (mylvlquarant);
> return 0;
> END;
> $$
> LANGUAGE plpgsql;
> <split here>
>
> Can anybody hint me in the right direction, how a RE looks for "all ;
> but not those ; within $$" ?
>
> Harald
>
> --
> http://mail.python.org/mailman/listinfo/python-list
More information about the Python-list
mailing list