import re
regex = re.compile(r"^(?=.*\b(DV|DoVi|Dolby[ .]?Vision)\b)(?=.*\b(HDR(10)?(?!\+))\b)", flags=re.MULTILINE | re.IGNORECASE)
test_str = ("# DV HDR10\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR.DoVi.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DoVi.HDR.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DoVi.HDR10.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HDR.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR.DV.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HDR10.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR10.DV.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][DV HDR10][HEVC]-RlsGrp\n\n"
"# DV\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DoVi.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][DV][HEVC]-RlsGrp\n\n"
"# this should be picked up as DV and will be DV HDR10 on import\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HDR10Plus.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HDR10P.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HDR10+.HEVC.REMUX-RlsGrp\n\n"
"# DV HLG\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.HLG.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][DV HLG][HEVC]-RlsGrp\n\n"
"# DV SDR\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.DV.SDR.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][DV SDR][HEVC]-RlsGrp\n\n"
"# HDR10Plus\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR10Plus.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR10P.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR10+.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][HDR10Plus][HEVC]-RlsGrp\n\n"
"# HDR10\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR10.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][HDR10][HEVC]-RlsGrp\n\n"
"# HDR\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HDR.HEVC.REMUX-RlsGrp\n\n"
"# HDR (undefined) - This one we might best keep as separate conditions ?\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HEVC.REMUX-RlsGrp\n\n"
"# PQ\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.PQ.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][PQ][HEVC]-RlsGrp\n\n"
"# HLG/HLG10\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HLG.HEVC.REMUX-RlsGrp\n"
"Movie.2015.UHD.BluRay.2160p.TrueHD.Atmos.7.1.HLG10.HEVC.REMUX-RlsGrp\n"
"Movie (2015) [Remux-2160p][TrueHD Atmos 7.1][HLG10][HEVC]-RlsGrp\n\n"
"# DON'T MATCH\n"
"adventure\n"
"hdruin\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