import re
regex = re.compile(r"^.+((V2)\s-\s).*(Dev|Test)$", flags=re.MULTILINE)
test_str = ("AppMessages V2 - Dev\n"
"AppMessages V2 - Master\n"
"AWS - Octopus Release\n"
"Bellhop Model V2 - Dev\n"
"Bellhop Model V2 - Master\n"
"BellHop Services V2 - Dev\n"
"BellHop Services V2 - Master\n"
"BellHop V2 - Dev\n"
"BellHop V2 - Master\n"
"BSG Log4j Extras V2 - Dev\n"
"BSG Log4j Extras V2 - Master\n"
"BSG-BOM - Dev\n"
"BSG-BOM - Master\n"
"BSG-BOM V2 - Dev\n"
"BSG-BOM V2 - Master\n"
"Core Model V2 - Dev\n"
"Core Model V2 - Master\n"
"Core Services V2 - Dev\n"
"Core Services V2 - Master\n"
"DealerLocator - Dev\n"
"EMS Services V2 - Dev\n"
"EMS Services V2 - Master\n"
"Entitlements REST API V2 - Dev\n"
"Entitlements REST API V2 - Master\n"
"Entitlements Services V2 - Dev\n"
"Entitlements Services V2 - Master\n"
"Entitlements SOAP API V2 - Dev\n"
"Entitlements SOAP API V2 - Master\n"
"FlexNet Services - Dev\n"
"FlexNet Services - Master\n"
"GetNodeInfo BusSys-Build-Slave-01\n"
"GetNodeInfo BusSys_Corp_Build_Slave\n"
"GetNodeInfo Master\n"
"Laipac Services V2 - Dev\n"
"Laipac Services V2 - Master\n"
"LDK Services V2 - Dev\n"
"LDK Services V2 - Master\n"
"LicenseAdmin - Dev\n"
"LicenseAdmin - Master\n"
"List All Jobs\n"
"Lite Services V2 - Dev\n"
"Lite Services V2 - Master\n"
"LiteFlexNetIntegration V2 - Dev\n"
"LiteFlexNetIntegration V2 - Master\n"
"LiteIntegration - Dev\n"
"LiteIntegration - Master\n"
"Messaging Services V2 - Dev\n"
"Messaging Services V2 - Master\n"
"MTPConsumer - Dev\n"
"MTPConsumer - Master\n"
"OptionKeys - Dev\n"
"OptionKeys - Master\n"
"OptionKeysAPI - Dev\n"
"OptionKeysAPI - Master\n"
"Panther REST API V2 - Dev\n"
"Pools API V2 - Dev\n"
"Pools API V2 - Master\n"
"Pools Model V2 - Dev\n"
"Pools Model V2 - Master\n"
"Pools Services V2 - Dev\n"
"Pools Services V2 - Master\n"
"Preconfigured API V2 - Dev\n"
"Preconfigured API V2 - Master\n"
"SCL Client V2 - Dev\n"
"SCL Client V2 - Master\n"
"SentinelCloud Services V2 - Dev\n"
"SentinelCloud Services V2 - Master\n"
"SubscriptionManager V2 - Dev\n"
"SubscriptionManager V2 - Master\n"
"TermsOfService - Master\n"
"Test Support V2 - Dev\n"
"Test Support V2 - Master\n"
"Tid Services V2 - Dev\n"
"Tid Services V2 - Master\n"
"Upload templates to S3 - branch2Dev\n"
"Upload templates to S3 - Dev\n"
"Upload templates to S3 - Master\n"
"Upload templates to S3 - Test\n"
"VirtualWarehouse - Dev\n"
"VirtualWarehouse - Master\n"
"VirtualWarehouse Services V2 - Dev\n"
"VirtualWarehouse Services V2 - Master\n"
"VW Lite API - Dev\n"
"VW Lite API - Master\n"
"VW Remedy Events - Dev\n"
"VW Remedy Events - Master\n"
"VW Remedy Events Consumer - Dev\n"
"VW Remedy Events Consumer - Master\n"
"VW Remedy Events Lib - Dev\n"
"VW Remedy Events Lib - Master\n"
"VW Scheduled Tasks V2 - Dev\n"
"VW Scheduled Tasks V2 - Master\n"
"VW Sentinel V2 - Dev\n"
"VW Sentinel V2 - Master\n"
"VW Subscriptions V2 - Dev\n"
"VW Subscriptions V2 - Master\n"
"VW5 - Dev\n"
"VW5 - Master\n"
"WooCommerce API V2 - Dev\n"
"WooCommerce API V2 - Master\n"
"WooCommerce Model V2 - Dev\n"
"WooCommerce Model V2 - Master\n"
"WooCommerce Services V2 - Dev\n"
"WooCommerce Services V2 - Master")
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