import re
regex = re.compile(r"{tex\b([^{}]*({[^{}]*?([^{}]|(?R))*[^{}]*?}[^{}]*)*[^{}]*)}", flags=re.MULTILINE)
test_str = ("# This is currently a test\n\n"
"{nav Home}\n\n"
"The statistical model estimated the probability, {tex f(x) = \\int_{-\\infty}\n"
"^\\infty \\hat f(\\xi)\\,e^{2 \\pi \\xi x} \\,d\\xi }, of capturing dolphins on a tow, {tex i}. A year effect, {tex \\lambda_{acb_{j}}} was estimated for each year, {tex j}, allowing for annual variation in the capture event rates that was unrelated to the covariates, {tex x}. The contribution of each covariate, indexed by {tex c}, was governed by a regression coefficient, {tex \\beta_c}, that was estimated by the model. The logit transform of the capture event probability was defined as the sum of the year effect, {tex \\lambda_{lam} {lam} }, and the covariates:\n"
"{tex \\lambda_{lam}{lam} }\n"
"{tex \\lambda_{lam} {lam} }\n"
"{tex \\lambda_{lam}{lam}}\n"
"katex {{{\n"
"logit(\\pi_i) = \\lambda_{j[i]} + \\sum_c \\beta_c x_{ic}.\n"
"}}}\n"
"determines the result.\n\n"
"# The following is more tests\n\n"
"katex {{{\n"
"f(x) = \\int_{-\\infty}^\\infty\n"
" \\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\n"
" \\,d\\xi \n"
"}}}\n\n"
"katex {{{\n"
"\\begin{bmatrix}\n"
" a & b \\\\\n"
" c & a \n"
" \\end{bmatrix}\n"
"}}}\n\n"
"katex {{{\n"
"\\begin{bmatrix}\n"
" a & c \\\\\n"
" c & a \n"
" \\end{bmatrix}\n"
"}}}\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