import re
regex = re.compile(r"(?:(?:from|join)(?:\s|\()+((?:\w*\.\w*)+)(?:\s|\))+)", flags=re.IGNORECASE)
test_str = ("SELECT T.IDP_WAREHOUSE_ID\n"
" ,T.IDP_AUDIT_ID\n"
" ,T.IDP_DATA_ID\n"
" ,T.IDP_DATA_DATE\n"
" ,T.TRADESYSTEM\n"
" ,T.SOURCESYSTEM\n"
" ,T.SUBSYSTEM\n"
" ,T.TRADEDATE\n"
" ,T.VALUATIONDATE\n"
" ,T.TRADEID\n"
" ,T.TRADETYPE\n"
" ,T.TRADESTATUS\n"
" ,T.MAPPEDTRADESTATUS\n"
" ,T.RAWBOOKINGLOCATION\n"
" ,T.MAPPEDBOOKINGLOCATION\n"
" ,T.BOOKINGLOCREGION\n"
" ,T.CMCIFBOOKINGLOCATION\n"
" ,T.CMCIFBOOKINGLOCATIONREGION\n"
" ,T.COUNTERPARTYACCOUNTID\n"
" ,T.COUNTERPARTYSHORTNAME\n"
" ,T.COUNTERPARTYTYPE\n"
" ,T.CUSTOMERNAME\n"
" ,T.CUSTOMERADDRESS\n"
" ,T.CUSTOMERCOUNTRYCODE\n"
" ,T.CUSTOMERCOUNTRYNAME\n"
" ,T.CAMLO_RISK\n"
" ,T.US_BSA_RISK\n"
" ,T.RISKRATING\n"
" ,T.PRODUCTTYPE\n"
" ,T.PRODUCT\n"
" ,T.CMCIFPRODUCTTYPE\n"
" ,T.QUANTITY\n"
" ,T.PRICE\n"
" ,T.CURRENCY\n"
" ,T.CURRENCY_ISO_CODE\n"
" ,T.CURRENCY_DESCRIPTION\n"
" ,T.\"VALUE\"\n"
" ,T.TRADERID\n"
" ,T.TRANSACTIONACTIVITY\n"
" ,T.SOURCETRADEID\n"
" ,T.TRADESEQUENCENUMBER\n"
" ,T.BASECURRENCY\n"
" ,T.BASECURRPRICE\n"
" ,T.BASECURRQUANTITY\n"
" ,T.BASECURRVALUE\n"
" ,T.ISIN\n"
" ,T.CUSIP\n"
" ,T.RESP\n"
" ,T.FACILITY_GLOBAL_COMMITMENT\n"
" ,T.FACILITY_HOST_BANK_NET_AMT\n"
" ,T.MAP_TRADESYSTEM\n"
" ,T.MAP_ACCOUNTFIELDNAME\n"
" ,T.MAP_COUNTERPARTYACCOUNTID\n"
" ,T.MAP_CUID\n"
" ,T.MAP_CIF\n"
" ,T.MAP_UEN\n"
" ,RC.RAW AS CHICAGO_RAW\n"
" ,RC.RESPONSIBILITY_CENTER AS CHICAGO_RESPONSIBILITY_CENTER\n"
" ,RC.DESK AS CHICAGO_DESK\n"
" ,RC.BUSINESS_SEGMENT AS CHICAGO_BUSINESS_SEGMENT\n"
" ,RC.LOB AS CHICAGO_LOB\n"
" ,RC.OPERATING_GROUP AS CHICAGO_OPERATING_GROUP\n"
" ,AFF.RAW AS AFF_RAW\n"
" ,ISS.RAW AS ISS_RAW\n"
" ,EC1.ENTITYCOUNTRY AS REGISTRATION_COUNTRY\n"
" ,EC2.ENTITYCOUNTRY AS PRINCIPAL_PLACE_OF_BUSINESS\n"
" ,ENT.CIF AS ENT_CIF\n"
" ,ENT.UEN AS ENT_UEN\n"
" ,ENT.ENTITYLEGALNAME AS ENT_ENTITYLEGALNAME\n"
" ,ENT.ENTITYADDRESS AS ENT_ENTITYADDRESS\n"
" ,ENT.ENTITYACCOUNTNUMBER AS ENT_ENTITYACCOUNTNUMBER\n"
" ,ENT.ENTITYSTATUS AS ENT_ENTITYSTATUS\n"
" ,ENT.IFI_FLAG AS ENT_IFI_FLAG\n"
" ,ENT.SICCAN AS ENT_SICCAN\n"
" ,ENT.SICUS AS ENT_SICUS\n"
" ,ENT.NBFI_312 AS ENT_NBFI_312\n"
" ,ENT.NBFI_NON_312 AS ENT_NBFI_NON_312\n"
" ,ENT.RMA AS ENT_RMA\n"
" ,ENT.SICCAN_DESC AS ENT_SICCAN_DESC\n"
" ,ENT.SICUS_DESC AS ENT_SICUS_DESC\n"
" ,ENT.P_AND_C AS ENT_P_AND_C\n"
" ,ENT.OFAC AS ENT_OFAC\n"
" ,ENT.RMA_ONLY AS ENT_RMA_ONLY\n"
" ,ENT.CONN_UEN AS ENT_CONN_UEN\n"
" ,ENT.CM_INDICATOR AS ENT_CM_INDICATOR\n"
" ,ENT.BMO_RESP AS ENT_BMO_RESP\n"
" ,ENT.HARRIS_RESP AS ENT_HARRIS_RESP\n"
" ,ENT.PRIM_IND AS ENT_PRIM_IND\n"
" ,ENT.PM_CODE AS ENT_PM_CODE\n"
" ,APPR.CUSTOMER_NAME AS APPR_CUSTOMER_NAME\n"
" ,APPR.UEN AS APPR_UEN\n"
" ,APPR.COUNTRY AS APPR_COUNTRY\n"
" ,APPR.CONDITIONAL_APPROVAL AS APPR_CONDITIONAL_APPROVAL\n"
" ,APPR.PRODUCTS AS APPR_PRODUCTS\n"
" ,APPR_FI.CUSTOMER_NAME AS APPR_FI_CUSTOMER_NAME\n"
" ,APPR_FI.UEN AS APPR_FI_UEN\n"
" ,APPR_FI.COUNTRY AS APPR_FI_COUNTRY\n"
" ,APPR_FI.CONDITIONAL_APPROVAL AS APPR_FI_CONDITIONAL_APPROVAL\n"
" ,APPR_FI.PRODUCTS AS APPR_FI_PRODUCTS\n"
" ,APMS.UEN AS APMS_UEN\n"
" ,APMS.CIF AS APMS_CIF\n"
" ,APMS.ENTITY_LEGAL_NAME AS APMS_ENTITY_LEGAL_NAME\n"
" ,APMS.ENTITY_SHORT_NAME AS APMS_ENTITY_SHORT_NAME\n"
" ,APMS.OWNERSHIP_CLASS AS APMS_OWNERSHIP_CLASS\n"
" ,APMS.ENTITY_CLASSIFICATION AS APMS_ENTITY_CLASSIFICATION\n"
" ,APMS.ASSET_CLASSIFICATION AS APMS_ASSET_CLASSIFICATION\n"
" ,APMS.BMO_RC AS APMS_BMO_RC\n"
" ,APMS.ENTITY_TYPE AS APMS_ENTITY_TYPE\n"
" ,APMS.TIN_SSN AS APMS_TIN_SSN\n"
"FROM (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" (\n"
" SELECT A.IDP_WAREHOUSE_ID\n"
" ,A.IDP_AUDIT_ID\n"
" ,A.IDP_DATA_ID\n"
" ,A.IDP_DATA_DATE\n"
" ,A.TRADESYSTEM\n"
" ,A.SOURCESYSTEM\n"
" ,A.SUBSYSTEM\n"
" ,A.TRADEDATE\n"
" ,A.VALUATIONDATE\n"
" ,A.TRADEID\n"
" ,A.TRADETYPE\n"
" ,A.TRADESTATUS\n"
" ,A.MAPPEDTRADESTATUS\n"
" ,A.RAWBOOKINGLOCATION\n"
" ,A.MAPPEDBOOKINGLOCATION\n"
" ,A.BOOKINGLOCREGION\n"
" ,A.CMCIFBOOKINGLOCATION\n"
" ,A.CMCIFBOOKINGLOCATIONREGION\n"
" ,A.COUNTERPARTYACCOUNTID\n"
" ,A.COUNTERPARTYSHORTNAME\n"
" ,A.COUNTERPARTYTYPE\n"
" ,A.CUSTOMERNAME\n"
" ,A.CUSTOMERADDRESS\n"
" ,A.CUSTOMERCOUNTRYCODE\n"
" ,A.CUSTOMERCOUNTRYNAME\n"
" ,A.CAMLO_RISK\n"
" ,A.US_BSA_RISK\n"
" ,A.RISKRATING\n"
" ,A.PRODUCTTYPE\n"
" ,A.PRODUCT\n"
" ,A.CMCIFPRODUCTTYPE\n"
" ,A.QUANTITY\n"
" ,A.PRICE\n"
" ,A.CURRENCY\n"
" ,A.CURRENCY_ISO_CODE\n"
" ,A.CURRENCY_DESCRIPTION\n"
" ,A.\"VALUE\"\n"
" ,A.TRADERID\n"
" ,A.TRANSACTIONACTIVITY\n"
" ,A.SOURCETRADEID\n"
" ,A.TRADESEQUENCENUMBER\n"
" ,A.BASECURRENCY\n"
" ,A.BASECURRPRICE\n"
" ,A.BASECURRQUANTITY\n"
" ,A.BASECURRVALUE\n"
" ,A.ISIN\n"
" ,A.CUSIP\n"
" ,A.RESP\n"
" ,A.FACILITY_GLOBAL_COMMITMENT\n"
" ,A.FACILITY_HOST_BANK_NET_AMT\n"
" ,MAP.TRADESYSTEM AS MAP_TRADESYSTEM\n"
" ,MAP.ACCOUNTFIELDNAME AS MAP_ACCOUNTFIELDNAME\n"
" ,MAP.COUNTERPARTYACCOUNTID AS MAP_COUNTERPARTYACCOUNTID\n"
" ,MAP.CUID AS MAP_CUID\n"
" ,MAP.CIF AS MAP_CIF\n"
" ,CASE \n"
" WHEN (A.TRADESYSTEM = 'LIQ'::\"VARCHAR\")\n"
" THEN A.COUNTERPARTYACCOUNTID\n"
" ELSE (\"VARCHAR\" (MAP.UEN))::VARCHAR(16)\n"
" END AS MAP_UEN\n"
" FROM (\n"
" BLUEHOUSE.V_TRANSACTIONS A LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITYMAPPING MAP ON (\n"
" (\n"
" (\n"
" (A.COUNTERPARTYACCOUNTID = UPPER(BTRIM(MAP.COUNTERPARTYACCOUNTID)))\n"
" AND (UPPER(A.TRADESYSTEM) = UPPER(MAP.TRADESYSTEM))\n"
" )\n"
" AND (\n"
" MAP.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITYMAPPING.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITYMAPPING\n"
" )\n"
" )\n"
" )\n"
" )\n"
" )\n"
" ) T LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_REF_CHICAGO_RCMAPPING RC ON (\n"
" (\n"
" (RC.RAW = T.RESP)\n"
" AND (RC.IDP_END_DATE = '2099-12-31'::DATE)\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_REF_CHICAGO_AFFILIATED_RCS AFF ON (\n"
" (\n"
" (AFF.RAW = T.RESP)\n"
" AND (AFF.IDP_END_DATE = '2099-12-31'::DATE)\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_REF_CHICAGO_BOOKING_ISSUES_RCS ISS ON (\n"
" (\n"
" (ISS.RAW = T.RESP)\n"
" AND (ISS.IDP_END_DATE = '2099-12-31'::DATE)\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIESCOUNTRY EC1 ON (\n"
" (\n"
" (\n"
" (\n"
" EC1.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIESCOUNTRY.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIESCOUNTRY\n"
" )\n"
" )\n"
" AND ((\"VARCHAR\" (EC1.UEN))::VARCHAR(16) = T.MAP_UEN)\n"
" )\n"
" AND (UPPER(EC1.ENTITYADDRESSTYPE) = 'REGISTERED'::\"VARCHAR\")\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIESCOUNTRY EC2 ON (\n"
" (\n"
" (\n"
" (\n"
" EC2.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIESCOUNTRY.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIESCOUNTRY\n"
" )\n"
" )\n"
" AND ((\"VARCHAR\" (EC2.UEN))::VARCHAR(16) = T.MAP_UEN)\n"
" )\n"
" AND (UPPER(EC2.ENTITYADDRESSTYPE) = 'PRINCIPAL PLACE OF BUSINESS'::\"VARCHAR\")\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIES ENT ON (\n"
" (\n"
" (\n"
" ENT.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIES.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_ENTITIES\n"
" )\n"
" )\n"
" AND ((\"VARCHAR\" (ENT.UEN))::VARCHAR(16) = T.MAP_UEN)\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APPROVED_US_312 APPR ON (\n"
" (\n"
" (\n"
" APPR.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APPROVED_US_312.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APPROVED_US_312\n"
" )\n"
" )\n"
" AND ((\"VARCHAR\" (APPR.UEN))::VARCHAR(16) = T.MAP_UEN)\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APPROVED_US_FI APPR_FI ON (\n"
" (\n"
" (\n"
" APPR_FI.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APPROVED_US_FI.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APPROVED_US_FI\n"
" )\n"
" )\n"
" AND ((\"VARCHAR\" (APPR_FI.UEN))::VARCHAR(16) = T.MAP_UEN)\n"
" )\n"
" )\n"
" ) LEFT JOIN IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APMS_ENTITIES APMS ON (\n"
" (\n"
" (\n"
" APMS.IDP_DATA_ID = (\n"
" SELECT MAX(IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APMS_ENTITIES.IDP_DATA_ID) AS MAX\n"
" FROM IDP_PRD_LEVEL1.BLUEHOUSE.L1_WRK_APMS_ENTITIES\n"
" )\n"
" )\n"
" AND ((\"VARCHAR\" (APMS.UEN))::VARCHAR(16) = T.MAP_UEN)\n"
" )\n"
" )\n"
" )\n"
"WHERE (\n"
" (UPPER(T.CMCIFBOOKINGLOCATION) ~ ~ LIKE_ESCAPE('%CHICAGO%'::\"VARCHAR\", '\\'::\"VARCHAR\"))\n"
" OR (T.RESP = AFF.RAW)\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