import re
test_str = """
/*--------------------------------*- 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)
);
}
);
// ************************************************************************* //
"""
# Clean comments:
test_str = re.sub(r"//.*", '', test_str)
test_str = re.sub(r"/\*.*?\*/", '', test_str, 0, re.DOTALL)
# Match main group
matches = re.findall(r"\bvertices\s*\((\s*(?:\([^)]+\)\s*)+)\)", test_str, re.MULTILINE | re.DOTALL)
# Fetch tuples
matches2 = re.findall(r"\([^)]+\)", matches[0], re.MULTILINE | re.DOTALL)
print matches2
aW1wb3J0IHJlCgp0ZXN0X3N0ciA9ICIiIgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi0gQysrIC0qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcCnwgPT09PT09PT09ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBcXCAgICAgIC8gIEYgaWVsZCAgICAgICAgIHwgT3BlbkZPQU06IFRoZSBPcGVuIFNvdXJjZSBDRkQgVG9vbGJveCAgICAgICAgICAgfAp8ICBcXCAgICAvICAgTyBwZXJhdGlvbiAgICAgfCBWZXJzaW9uOiAgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgICBcXCAgLyAgICBBIG5kICAgICAgICAgICB8IFdlYjogICAgICB3d3cuT3BlbkZPQU0ub3JnICAgICAgICAgICAgICAgICAgICAgIHwKfCAgICBcXC8gICAgIE0gYW5pcHVsYXRpb24gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkZvYW1GaWxlCnsKICAgIHZlcnNpb24gICAgIDIuMDsKICAgIGZvcm1hdCAgICAgIGFzY2lpOwogICAgY2xhc3MgICAgICAgZGljdGlvbmFyeTsKICAgIG9iamVjdCAgICAgIGJsb2NrTWVzaERpY3Q7Cn0KLy8gKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAqICogKiAvLwoKY29udmVydFRvTWV0ZXJzIDAuMDAxOwoKdmVydGljZXMKKAogICAgKC0yMC42IDAgLTAuNSkKICAgICgtMjAuNiAyNS40IC0wLjUpICAvKiBTb21lIGNvbW1lbnQgKi8KICAgICgwIC0yNS40IC0wLjUpCiAgICAoMCAwIC0wLjUpCiAgICAoMCAyNS40IC0wLjUpCiAgICAoMjA2IC0yNS40IC0wLjUpCiAgICAoMjA2IDAgLTAuNSkKICAgICgyMDYgMjUuNCAtMC41KQogICAgKDI5MCAtMTYuNiAtMC41KQogICAgKDI5MCAwIC0wLjUpCiAgICAoMjkwIDE2LjYgLTAuNSkKCiAgICAoLTIwLjYgMCAwLjUpCiAgICAoLTIwLjYgMjUuNCAwLjUpCiAgICAoMCAtMjUuNCAwLjUpCiAgICAoMCAwIDAuNSkKICAgICgwIDI1LjQgMC41KQogICAgKDIwNiAtMjUuNCAwLjUpCiAgICAoMjA2IDAgMC41KQogICAgKDIwNiAyNS40IDAuNSkKICAgICgyOTAgLTE2LjYgMC41KQogICAgKDI5MCAwIDAuNSkKICAgICgyOTAgMTYuNiAwLjUpCiAgLyooMSAyIDMgNCkqLyAvLyBDb21tZW50ZWQgdHVwbGUKICAvLygxIDIgMyA0KQopOwoKLyogdmVydGljZXMgY29tbWVudGVkCnZlcnRpY2VzCigKICAgICgtMjAuNiAwIC0wLjUpCiAgICAoLTIwLjYgMjUuNCAtMC41KQogICAgKDAgLTI1LjQgLTAuNSkKICAgICgwIDAgLTAuNSkKICAgICgwIDI1LjQgLTAuNSkKICAgICgyMDYgLTI1LjQgLTAuNSkKICAgICgyMDYgMCAtMC41KQogICAgKDIwNiAyNS40IC0wLjUpCiAgICAoMjkwIC0xNi42IC0wLjUpCiAgICAoMjkwIDAgLTAuNSkKICAgICgyOTAgMTYuNiAtMC41KQopCiovCgpuZWdZCigKICAgICgyIDQgMSkKICAgICgxIDMgMC4zKQopOwoKcG9zWQooCiAgICAoMSA0IDIpCiAgICAoMiAzIDQpCiAgICAoMiA0IDAuMjUpCik7Cgpwb3NZUgooCiAgICAoMiAxIDEpCiAgICAoMSAxIDAuMjUpCik7CgoKYmxvY2tzCigKICAgIGhleCAoMCAzIDQgMSAxMSAxNCAxNSAxMikKICAgICgxOCAzMCAxKQogICAgc2ltcGxlR3JhZGluZyAoMC41ICRwb3NZIDEpCgogICAgaGV4ICgyIDUgNiAzIDEzIDE2IDE3IDE0KQogICAgKDE4MCAyNyAxKQogICAgZWRnZUdyYWRpbmcgKDQgNCA0IDQgJG5lZ1kgMSAxICRuZWdZIDEgMSAxIDEpCgogICAgaGV4ICgzIDYgNyA0IDE0IDE3IDE4IDE1KQogICAgKDE4MCAzMCAxKQogICAgZWRnZUdyYWRpbmcgKDQgNCA0IDQgJHBvc1kgJHBvc1lSICRwb3NZUiAkcG9zWSAxIDEgMSAxKQoKICAgIGhleCAoNSA4IDkgNiAxNiAxOSAyMCAxNykKICAgICgyNSAyNyAxKQogICAgc2ltcGxlR3JhZGluZyAoMi41IDEgMSkKCiAgICBoZXggKDYgOSAxMCA3IDE3IDIwIDIxIDE4KQogICAgKDI1IDMwIDEpCiAgICBzaW1wbGVHcmFkaW5nICgyLjUgJHBvc1lSIDEpCik7CgplZGdlcwooCik7Cgpib3VuZGFyeQooCiAgICBpbmxldAogICAgewogICAgICAgIHR5cGUgcGF0Y2g7CiAgICAgICAgZmFjZXMKICAgICAgICAoCiAgICAgICAgICAgICgwIDEgMTIgMTEpCiAgICAgICAgKTsKICAgIH0KICAgIG91dGxldAogICAgewogICAgICAgIHR5cGUgcGF0Y2g7CiAgICAgICAgZmFjZXMKICAgICAgICAoCiAgICAgICAgICAgICg4IDkgMjAgMTkpCiAgICAgICAgICAgICg5IDEwIDIxIDIwKQogICAgICAgICk7CiAgICB9CiAgICB1cHBlcldhbGwKICAgIHsKICAgICAgICB0eXBlIHdhbGw7CiAgICAgICAgZmFjZXMKICAgICAgICAoCiAgICAgICAgICAgICgxIDQgMTUgMTIpCiAgICAgICAgICAgICg0IDcgMTggMTUpCiAgICAgICAgICAgICg3IDEwIDIxIDE4KQogICAgICAgICk7CiAgICB9CiAgICBsb3dlcldhbGwKICAgIHsKICAgICAgICB0eXBlIHdhbGw7CiAgICAgICAgZmFjZXMKICAgICAgICAoCiAgICAgICAgICAgICgwIDMgMTQgMTEpCiAgICAgICAgICAgICgzIDIgMTMgMTQpCiAgICAgICAgICAgICgyIDUgMTYgMTMpCiAgICAgICAgICAgICg1IDggMTkgMTYpCiAgICAgICAgKTsKICAgIH0KICAgIGZyb250QW5kQmFjawogICAgewogICAgICAgIHR5cGUgZW1wdHk7CiAgICAgICAgZmFjZXMKICAgICAgICAoCiAgICAgICAgICAgICgwIDMgNCAxKQogICAgICAgICAgICAoMiA1IDYgMykKICAgICAgICAgICAgKDMgNiA3IDQpCiAgICAgICAgICAgICg1IDggOSA2KQogICAgICAgICAgICAoNiA5IDEwIDcpCiAgICAgICAgICAgICgxMSAxNCAxNSAxMikKICAgICAgICAgICAgKDEzIDE2IDE3IDE0KQogICAgICAgICAgICAoMTQgMTcgMTggMTUpCiAgICAgICAgICAgICgxNiAxOSAyMCAxNykKICAgICAgICAgICAgKDE3IDIwIDIxIDE4KQogICAgICAgICk7CiAgICB9Cik7Ci8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLy8KIiIiCgojIENsZWFuIGNvbW1lbnRzOgp0ZXN0X3N0ciA9IHJlLnN1YihyIi8vLioiLCAnJywgdGVzdF9zdHIpCnRlc3Rfc3RyID0gcmUuc3ViKHIiL1wqLio/XCovIiwgJycsIHRlc3Rfc3RyLCAwLCByZS5ET1RBTEwpCgojIE1hdGNoIG1haW4gZ3JvdXAKbWF0Y2hlcyA9IHJlLmZpbmRhbGwociJcYnZlcnRpY2VzXHMqXCgoXHMqKD86XChbXildK1wpXHMqKSspXCkiLCB0ZXN0X3N0ciwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQoKIyBGZXRjaCB0dXBsZXMKbWF0Y2hlczIgPSByZS5maW5kYWxsKHIiXChbXildK1wpIiwgbWF0Y2hlc1swXSwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMKQpwcmludCBtYXRjaGVzMgogICAg
['(-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)', '(-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)']