Multiline regex

Peter Otten __peter__ at web.de
Wed Jul 21 11:16:04 EDT 2010


Brandon Harris wrote:

> I'm trying to read in and parse an ascii type file that contains
> information that can span several lines.
> Example:
> 
> createNode animCurveTU -n "test:master_globalSmooth";
>     setAttr ".tan" 9;
>     setAttr -s 4 ".ktv[0:3]"  101 0 163 0 169 0 201 0;
>     setAttr -s 4 ".kit[3]"  10;
>     setAttr -s 4 ".kot[3]"  10;
> createNode animCurveTU -n "test:master_res";
>     setAttr ".tan" 9;
>     setAttr ".ktv[0]"  103 0;
>     setAttr ".kot[0]"  5;
> createNode animCurveTU -n "test:master_faceRig";
>     setAttr ".tan" 9;
>     setAttr ".ktv[0]"  103 0;
>     setAttr ".kot[0]"  5;
> 
> I'm wanting to grab the information out in chunks, so
> 
> createNode animCurveTU -n "test:master_faceRig";
>     setAttr ".tan" 9;
>     setAttr ".ktv[0]"  103 0;
>     setAttr ".kot[0]"  5;
> 
> would be what my regex would grab.
> I'm currently only able to grab out the first line and part of the
> second line, but no more.
> regex is as follows
> 
> my_regexp = re.compile("createNode\ animCurve.*\n[\t*setAttr.*\n]*")
> 
> I've run several variations of this, but none return me all of the
> expected information.
> 
> Is there something special that needs to be done to have the regexp grab
> any number of the setAttr lines without specification?

Groups are marked with parens (...) not brackets [...].

>>> text = """\
... createNode animCurveTU -n "test:master_globalSmooth";
...     setAttr ".tan" 9;                                
...     setAttr -s 4 ".ktv[0:3]"  101 0 163 0 169 0 201 0;
...     setAttr -s 4 ".kit[3]"  10;
...     setAttr -s 4 ".kot[3]"  10;
... createNode animCurveTU -n "test:master_res";
...     setAttr ".tan" 9;
...     setAttr ".ktv[0]"  103 0;
...     setAttr ".kot[0]"  5;
... createNode animCurveTU -n "test:master_faceRig";
...     setAttr ".tan" 9;
...     setAttr ".ktv[0]"  103 0;
...     setAttr ".kot[0]"  5;
... """
>>> for m in re.compile("(createNode animCurve.*\n(\s*setAttr.*\n)*)").finditer(text):
...     print m.group(1)
...     print "-" * 40
...
createNode animCurveTU -n "test:master_globalSmooth";
    setAttr ".tan" 9;
    setAttr -s 4 ".ktv[0:3]"  101 0 163 0 169 0 201 0;
    setAttr -s 4 ".kit[3]"  10;
    setAttr -s 4 ".kot[3]"  10;

----------------------------------------
createNode animCurveTU -n "test:master_res";
    setAttr ".tan" 9;
    setAttr ".ktv[0]"  103 0;
    setAttr ".kot[0]"  5;

----------------------------------------
createNode animCurveTU -n "test:master_faceRig";
    setAttr ".tan" 9;
    setAttr ".ktv[0]"  103 0;
    setAttr ".kot[0]"  5;

----------------------------------------

Peter




More information about the Python-list mailing list