import re
regex = re.compile(r"(?:\"(?:(?<=\"(?=[^\n]))[^\n]+?(?=(?<!\\))(?=\"))?\")|(\B'(?:(?<='(?=[^\n]))[^\n]+?(?=(?<!\\))(?='))?')", flags=re.MULTILINE)
test_str = ("\n"
"1. Valid double-quoted strings:\n"
" - \"Hello\"\n"
" - \"This is a test\"\n"
" - \"123\"\n"
" - \"Special characters: @#$%^&*()_+\"\n"
" - \"Escape sequence: \\n\"\n\n"
"2. Valid double-quoted strings with additional characters or variables:\n"
" - \" test aaaaa \\\" \" + asdf\n"
" - \" test \" + ( \"aaaaa\" ) + gdf\n"
" - \" test \\\" \" + `\" aaaa \" + dfg\n"
" - \" test ' aaaaa \\\" \" + dfg\n"
" - \"\"\n\n"
"3. Valid double-quoted strings with special characters:\n"
" - \"sas''as\\\"a1\\'2 ! -_?:sa\"\n"
" - \"''\"\n"
" - \"\\abnb\\ajhgf\\crt098& \\\"'\"\n\n"
"4. Invalid double-quoted strings:\n"
" - \" test \" + ( \"aaaaa\" ) \\\" saf\n"
" - \"\\\\ + \\* test \" \\$ \\. dsdfs\n"
" - (\\\" test \\\" \" + \" aaaa \" sfgd\n"
" - ' test ' + aas ( \"aaaaa\" ) + '\\ sd\n"
" - '\\\\ + \\* test ' \\$ \\. trace\n"
" - (' test ' as ' + ' aaaa '\n"
" - '\"\"'\n"
" - '\"sas'\n"
" - 'ads'\n"
" - 'asdasd\\\"asdsa'\n"
" - \"klkl\"klkl\n"
" - \"asa\\'sasa\\\\\"\n"
" - \\'\\\\\\'\n"
" - \"hhhh\"klkl\"\n"
" - 'jkjkjk'klklk'\n"
" - '\\\"\\\\\\\"'\n"
" - ''\n"
" - '\\\"asa\\'sasa\\\\\\\"'\n"
" - \"sasasasa\\\\\\\\\\\\\"\n\n\n\n"
"1. Valid single-quoted strings:\n"
" - 'Hello'\n"
" - 'This is a test'\n"
" - '123'\n"
" - 'Special characters: @#$%^&*()_+'\n"
" - 'Escape sequence: \\n'\n\n"
"2. Valid single-quoted strings with additional characters or variables:\n"
" - ' test aaaaa \\' ' + asdf\n"
" - ' test ' + ( 'aaaaa' ) + gdf\n"
" - ' test \\' ' + ' aaaa' + dfg\n"
" - ' test \" aaaaa \\' ' + dfg\n"
" - ''\n\n"
"3. Valid single-quoted strings with special characters:\n"
" - 'sas\"\"as\\'a1\\\"2 ! -_?:sa'\n"
" - '\"\"'\n"
" - '\\abnb\\ajhgf\\crt098& \\'\"\"'\n\n"
"4. Invalid single-quoted strings:\n"
" - ' test ' + ( 'aaaaa' ) \\' saf\n"
" - '\\\\ + \\* test ' \\$ \\. dsdfs\n"
" - (\\' test \\' + ' aaaa ' sfgd\n"
" - \" test \\\" \" + \" aaaa \" sfgd\n"
" - ' test ' + aas ( 'aaaaa' ) + '\\ sd\n"
" - '\\\\ + \\* test ' \\$ \\. trace\n"
" - (' test ' as ' + ' aaaa '\n"
" - \"''\"\n"
" - 'sas\"\n"
" - \"ads'\n"
" - 'asdasd\\'asdsa'\n"
" - \"klkl\"klkl\n"
" - \"asa\\'sasa\\\\\"\n"
" - \\'\\\\\\'\n"
" - 'hhhh\"klkl\\'\\\n"
" - \\'jkjkjk\"klklk'\n"
" - \"\\'\\\\\\'\"\n"
" - ''\n"
" - '\\\"asa\\'sasa\\\\\\\"'\n"
" - 'sasasasa\\\\\\\\\\\\'\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