import re
regex = re.compile(r"(--[\w-]+:[\s]*[^;\n}]+)", flags=re.MULTILINE)
test_str = ("these should match\n"
":root {\n"
" --externalcolor: red;\n"
" --samename: orange;\n"
" --samename: #0f0;\n"
" --foo: green;\n"
" --FOO: #0f0;\n"
" --halfsuccess: orange;\n"
"/* multiple on one line */\n"
" --success: green;--success2: #0f0;\n"
"/* forget the ; */\n"
" --success: green\n"
" --success2: #0f0\n\n"
" --fred: var(--foo);\n"
" --barney: var(--foo, test)\n"
"}\n\n"
":root {\n"
" /* name options */\n"
" --4name: startsWithNumber;\n"
" --name: startsWithLetter;\n"
" /* value options */\n"
" --startWithLetter: red;\n"
" --startWithPound: #0f0;\n"
" --startWithNumber: 20px;\n"
" --startWithQuoteDouble: \"test\";\n"
" --startWithQuoteSingle: 'test';\n"
" --containsUrl: url(\"http://test.com/foo?a=b&c=d\");\n"
" --containsPunctuation: -_,.;\n"
" --containsSpace: \"test space\";\n\n"
" /* misc conditions*/\n"
" --multipleOnOneLine1: green; --multipleOnOneLine2: #0f0;\n"
" --noSpaceAfterColon:test;\n"
" --multiSpaceAfterColon: test;\n"
" --dash-in-name: test;\n"
" --underscore_in_name: test;\n\n"
"}\n"
" /* minified css */\n"
" :root{--almost-black:#222;}html{color:var(--almost-black)}body{color:var(--almost-black);\n\n"
"don't match this (the double dash in the comments\n"
"/* ----------------------------------------------------- */\n"
"@import url(\"https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap\");\n\n"
"on one line\n"
"/* ----------------------------------------------------- */ @import url(\"https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap\");")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html