//Last modified: Sat, Apr 16, 2011 09:55:04 AM
//Codeset: ISO-8859-1
fileInfo "version" "20x64";
createNode newnode -n "a_SET";
addAttr -ci true -k true -sn "connections" -ln "connections" -dt "string";
setAttr -l on -k off ".tx";
setAttr -l on -k off ".ty";
setAttr -l on -k off ".sz";
setAttr -l on -k on ".test1" -type "string" "blabla";
setAttr -l on -k on ".test2" -type "string" "blablabla";
createNode newnode -n "b_SET";
addAttr -ci true -k true -sn "connections" -ln "connections" -dt "string";
setAttr -l on -k off ".tx";
setAttr -l on -k off ".ty";
setAttr -l on -k off ".sz";
setAttr -l on -k on ".test1" -type "string" "hmm";
setAttr -l on -k on ".test2" -type "string" "ehmehm";
in Python:
I need to read the newnode names for instance “a_SET” and “b_SET” and their corresponding attribute values so {“a_SET”: {“test1″:”blabla”, “test2″:”blablabla”} and the same for the b_SET – there could be unknown amount of sets – like c_SET d_SET etc.
I’ve tried looping through lines and matching it there:
for line in fileopened:
setmatch = re.match( r'^(createNode set -n ")(.*)(_SET)(.*)' , line)
if setmatch:
sets.append(setmatch.group(2))
and as soon as I find a match here I would loop through next lines to get the attributes (test1, test2) for that set until I find a new set – for instance c_SET or an EOF.
What would be the best way to grab all that info in one go with the re.MULTILINE?
I got this:
result
.
Question:
what if there must be character
'"'in the strings ? How is it represented ?.
EDIT
I had some difficulty to find the solution because I didn’t choose the facility.
Here’s a new pattern that catches the FIRST string
"..."and the LAST string"..."present after a string" setAttr"and before the next" setAttr". So several"..."can be present , not only 3. You didn’t asked this condition, but I thought it may happen to be needed.I also managed to make possible the presence of newlines in the strings to catch
"....\n......", not only around them. For that , I was obliged to invent something new for me:(?:\n(?! *setAttr)|[^"\n])that means : all characters, except'"'and commonnewlines \n, are accepted and also only the newlines that are not followed by a line beginning with' *setAttr'For
(?:\n(?! *setAttr)|.)it means : newlines not followed by a line beginning with' *setAttr'and all the other non-newline characters.Hence, any other special sequence as tab or whatever else are automatically accpted in the matchings.
result