# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = (r"(?x) # invoke extended (aka free-spacing) mode\n"
r"^ # match beginning of the string\n"
r"[^\"\n]* # match zero or more chars other than line terminators and double-quotes\n"
r"\" # match a double-quote\n"
r"[^\"\n]* # match zero or more chars other than line terminators and double-quotes\n"
r"(?<! # begin a negative lookbehind\n"
r" \ # match a space\n"
r" | # or\n"
r" \\n # match a backslash followed by n\n"
r") # end negative lookbehind\n"
r"\" # match a double-quote\n"
r"\n # match a newline\n"
r"\ * # match zero or more spaces\n"
r"\" # match double-quote\n"
r"[^ \"\n] # match a character other than a space, double-quote or newline\n"
r"[^\"\n]* # match zero or more chars other than line terminators and double-quotes\n"
r"\" # match a double-quote\n"
r"\n? # optionally match a newline\n"
r"$ # match end of string")
test_str = ("a c\"d1 %\"\n"
" \"&g i\"\n\n"
"\"9\"\n"
"\"&\"\n\n"
"d a\"fe \"\n"
" \"3h j\"\n\n"
"a c\"d1 \\n\"\n"
" \"&g i\"\n\n"
"a\"de f%x\"\n"
" \" &12 \"\n\n"
"#3 does not match due to space preceding second double-quote\n"
"#4 does not match due to a backslash followed by n preceding second double-quote\n"
"#5 does not match due to backslash followed by n following third double-quote\n"
"#5 does not match due to space following third double-quote\n")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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