import re s=''' /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 5 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object blockMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // convertToMeters 0.001; vertices ( (-20.6 0 -0.5) (-20.6 25.4 -0.5) /* Some comment */ (0 -25.4 -0.5) (0 0 -0.5) (0 25.4 -0.5) (206 -25.4 -0.5) (206 0 -0.5) (206 25.4 -0.5) (290 -16.6 -0.5) (290 0 -0.5) (290 16.6 -0.5) (-20.6 0 0.5) (-20.6 25.4 0.5) (0 -25.4 0.5) (0 0 0.5) (0 25.4 0.5) (206 -25.4 0.5) (206 0 0.5) (206 25.4 0.5) (290 -16.6 0.5) (290 0 0.5) (290 16.6 0.5) /*(1 2 3 4)*/ // Commented tuple //(1 2 3 4) ); /* vertices commented vertices ( (-20.6 0 -0.5) (-20.6 25.4 -0.5) (0 -25.4 -0.5) (0 0 -0.5) (0 25.4 -0.5) (206 -25.4 -0.5) (206 0 -0.5) (206 25.4 -0.5) (290 -16.6 -0.5) (290 0 -0.5) (290 16.6 -0.5) ) */ negY ( (2 4 1) (1 3 0.3) ); posY ( (1 4 2) (2 3 4) (2 4 0.25) ); posYR ( (2 1 1) (1 1 0.25) ); blocks ( hex (0 3 4 1 11 14 15 12) (18 30 1) simpleGrading (0.5 $posY 1) hex (2 5 6 3 13 16 17 14) (180 27 1) edgeGrading (4 4 4 4 $negY 1 1 $negY 1 1 1 1) hex (3 6 7 4 14 17 18 15) (180 30 1) edgeGrading (4 4 4 4 $posY $posYR $posYR $posY 1 1 1 1) hex (5 8 9 6 16 19 20 17) (25 27 1) simpleGrading (2.5 1 1) hex (6 9 10 7 17 20 21 18) (25 30 1) simpleGrading (2.5 $posYR 1) ); edges ( ); boundary ( inlet { type patch; faces ( (0 1 12 11) ); } outlet { type patch; faces ( (8 9 20 19) (9 10 21 20) ); } upperWall { type wall; faces ( (1 4 15 12) (4 7 18 15) (7 10 21 18) ); } lowerWall { type wall; faces ( (0 3 14 11) (3 2 13 14) (2 5 16 13) (5 8 19 16) ); } frontAndBack { type empty; faces ( (0 3 4 1) (2 5 6 3) (3 6 7 4) (5 8 9 6) (6 9 10 7) (11 14 15 12) (13 16 17 14) (14 17 18 15) (16 19 20 17) (17 20 21 18) ); } ); // ************************************************************************* // ''' # Remove comments like "//" until end of line s = re.sub(r'//.*', '', s) # Remove comments between /* and */ s = re.sub(r'/\*(.|\s)*?\*/', '', s, re.DOTALL) r1 = re.search(r'vertices\s*\(\s*(.*)\s*\)', s, re.DOTALL) vertices = [(float(v[0]),float(v[1]),float(v[2])) for v in re.findall(r'\(\s*([-0-9.]+)\s+([-0-9.]+)\s+([-0-9.]+)\s*\)', r1.group(1))] print(vertices)
Standard input is empty
[(-20.6, 0.0, -0.5), (-20.6, 25.4, -0.5), (0.0, -25.4, -0.5), (0.0, 0.0, -0.5), (0.0, 25.4, -0.5), (206.0, -25.4, -0.5), (206.0, 0.0, -0.5), (206.0, 25.4, -0.5), (290.0, -16.6, -0.5), (290.0, 0.0, -0.5), (290.0, 16.6, -0.5), (-20.6, 0.0, 0.5), (-20.6, 25.4, 0.5), (0.0, -25.4, 0.5), (0.0, 0.0, 0.5), (0.0, 25.4, 0.5), (206.0, -25.4, 0.5), (206.0, 0.0, 0.5), (206.0, 25.4, 0.5), (290.0, -16.6, 0.5), (290.0, 0.0, 0.5), (290.0, 16.6, 0.5), (2.0, 4.0, 1.0), (1.0, 3.0, 0.3), (1.0, 4.0, 2.0), (2.0, 3.0, 4.0), (2.0, 4.0, 0.25), (2.0, 1.0, 1.0), (1.0, 1.0, 0.25), (18.0, 30.0, 1.0), (180.0, 27.0, 1.0), (180.0, 30.0, 1.0), (25.0, 27.0, 1.0), (2.5, 1.0, 1.0), (25.0, 30.0, 1.0)]