# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = (r"(?xXmi)\n"
r"(?:\n"
r" (?# use non-capture for details in debugging)\n"
r" (?:\n"
r" (?<match>\n"
r" (?# If quoted value)\n"
r" (?<quot_char>(?<!\\)[\"'])\n"
r" (?# Quoted content)\n"
r" (?:\n"
r" (?:\n"
r" (?# Match as many characters that aren't quotation char)\n"
r" (?# or escape char as possible. )\n"
r" (?:(?:(?!\k<quot_char>|\\)).+)\n"
r" (?:\n"
r" (?# Match any/all escape chars that do not have the)\n"
r" (?# quotation char following it. )\n"
r" (?:(?:\\)*(?!\k<quot_char>))?\n"
r" (?# If there is an escape char followed by the quotation)\n"
r" (?# quotation char match them. )\n"
r" (?:[\\]\k<quot_char>)?\n"
r" )*?\n"
r" )\n"
r" )\n"
r" (?<close_quot>\k<quot_char>)\n"
r" |\n"
r" (?# if simple token)\n"
r" (?<basic>[^ \n]+)+\n"
r" )\n"
r" )\n"
r" (?<trail_ws>[ ]+)?\n"
r")")
test_str = ("-t1a1\n"
"-t2a1 -t2a2\n"
" -t3a1 -t3a2 \n"
"-t4a1 Test1value -t4a2 test4a2value -t4a3 t4a3value\n"
"-t5a1EscQuot \\'t5a1valueESQ\\' -t5a2EscQuot \\\"t5a2valueEDQ\\\"\n"
"-t6a1 \"t6a1value1DQWord1 t6a1value1DQWord1\" -t6a2SQuot 't6a2value1SQWord1 t6a2value1SQWord2 t6a2value1SQWord3 '\n"
"-t7a1SQuotEmpty '' -t7a2DQuotEmpty \"\"\n")
subst = "\\n${match}"
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)
if result:
print (result)
# 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