import re
regex = re.compile(r"(\/\/[^\"\n\r]*(?:\"[^\"\n\r]*\"[^\"\n\r]*)*[\r\n]|\/\*([^*]|\*(?!\/))*?\*\/)(?=[^\"]*(?:\"[^\"]*\"[^\"]*)*$)", flags=re.MULTILINE)
test_str = ("hey = \"//comment\" //comment \"\n"
"hey = \"//comment\" //comment \n"
"hey = \"/\" //comment\"\n"
"//\n"
"\"//\"/\"\n"
"# complete line should be found\n"
"//comment\n"
"lorem ipsum # from this to line end\n"
"/*\n"
" all three lines should be found\n"
"*/ but not here anymore\n"
"var x = \\\\\"this # should not be found\\\\\"\n"
"var y = \\\\\"this /* shouldn\\\\'t */ match either\\\\\"\n"
"var z = \\\\\"but\\\\\" & /* this must match */ \\\\\"_\\\\\"\n"
"Argh! what about a \\\\\"multiline string\\\\\\\\\n"
"with a # mark\\\\\\\\\n"
"int it ?! \\\\\"\n")
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