import re
regex = re.compile(r"@Prompt\('[^']*'(\s*,\s*'[^']*')*\)")
test_str = ("SELECT\n"
" sum(EXT_BAD_DEBT_HIST.BILL_AMT),\n"
" sum(EXT_BAD_DEBT_HIST.BILL_OPEN_AMT),\n"
" TIME_MONTH.YEAR,\n"
" TIME_MONTH.MONTH_NAME,\n"
" @Prompt('Desired %','N',,Mono,free,Not_Persistent),\n"
" TIME_MONTH.MONTH_NUM_OVERALL,\n"
" TIME_MONTH.FIRST_DAY,\n"
" TIME_MONTH.LAST_DAY\n"
"FROM\n"
" TIME_MONTH INNER JOIN EXT_BAD_DEBT_HIST ON (EXT_BAD_DEBT_HIST.MONTH_NUM_OVERALL=TIME_MONTH.MONTH_NUM_OVERALL)\n"
" INNER JOIN RSK_SHARED.LO_PRICE_GROUP RSK_SHARED_LO_PRICE_GROUP2 ON (RSK_SHARED_LO_PRICE_GROUP2.PRICE_GROUP_KEY=EXT_BAD_DEBT_HIST.CUST_PGROUP)\n\n"
"WHERE\n"
" (\n"
" TRUNC(EXT_BAD_DEBT_HIST.BD_DATE) = TRUNC(SYSDATE)\n"
" AND\n"
" EXT_BAD_DEBT_HIST.CUSTOMER_CATEGORY_CODE = 20\n"
" AND\n"
" ( EXT_BAD_DEBT_HIST.BILL_CYCLE = @Prompt('Bill Cycle','A','MIGRATION\\BC',Mono,primary_key,Not_Persistent) OR -1 = @Prompt('Bill Cycle','A','MIGRATION\\BC',Mono,primary_key,Not_Persistent) )\n"
" AND\n"
" TIME_MONTH.FIRST_DAY Is Not Null\n"
" AND\n"
" TIME_MONTH.LAST_DAY Is Not Null\n"
" AND\n"
" (\n"
" ( RSK_SHARED_LO_PRICE_GROUP2.PRICE_GROUP In @Prompt('Price Groups Sub-Groups','A','[Lookup] Price Group (2)\\Nested Price Group',Multi,Constrained,Not_Persistent) OR ('All Large 552' In @Prompt('Price Groups Sub-Groups','A','[Lookup] Price Group (2)\\Nested Price Group',Multi,Constrained,Not_Persistent) AND RSK_SHARED_LO_PRICE_GROUP2.PRICE_GROUP_CODE = 4) OR ('All SME' In @Prompt('Price Groups Sub-Groups','A','[Lookup] Price Group (2)\\Nested Price Group',Multi,Constrained,Not_Persistent) AND RSK_SHARED_LO_PRICE_GROUP2.PRICE_GROUP_CODE = 5) OR 'All' In @Prompt('Price Groups Sub-Groups','A','[Lookup] Price Group (2)\\Nested Price Group',Multi,Constrained,Not_Persistent) )\n"
" AND\n"
" EXT_BAD_DEBT_HIST.CUST_PGROUP <> 154\n"
" AND\n"
" EXT_BAD_DEBT_HIST.CUST_PGROUP NOT BETWEEN 161 AND 166\n"
" )\n"
" )\n"
"GROUP BY\n"
" TIME_MONTH.YEAR,\n"
" TIME_MONTH.MONTH_NAME,\n"
" @Prompt('Desired %','N',,Mono,free,Not_Persistent),\n"
" TIME_MONTH.MONTH_NUM_OVERALL,\n"
" TIME_MONTH.FIRST_DAY,\n"
" TIME_MONTH.LAST_DAY")
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