Multiline regex

Andreas Tawn andreas.tawn at ubisoft.com
Wed Jul 21 11:15:42 EDT 2010


> 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?
> 
> Brandon L. Harris

Aren't you making life too complicated for yourself?

blocks = []
for line in yourFile:
    if line.startswith("createNode"):
        if currentBlock:
            blocks.append(currentBlock)
        currentBlock = [line]
    else:
        currentBlock.append(line)
blocks.append(currentBlock)

Cheers,

Drea



More information about the Python-list mailing list