import re
regex = re.compile(r"^(?<title>.+?)[_.\s-]+(?<season>S\d+)(?:[.\-\s_]*?(?<seasonmax>S?\d+))?(?=[_.\s](?!E\d+))", flags=re.IGNORECASE | re.MULTILINE)
test_str = ("daily.show.name.2023.04.18.guest.name.1080p.web.h264-jebaited.mkv\n"
"BBC.News.at.Ten.2023.10.11.1080i.HDTV.DD2.0.H.264-BLS\n"
"WWE.NXT.2023.10.10.720p.WEB.h264-SPORTSNET\n"
"Tesco.How.Do.They.Really.Do.It.2023.1080p.HDTV.H264-DARKFLiX\n"
"Seth.Meyers.2023.10.09.Amy.Sedaris.1080p.WEB.h264-EDITH\n"
"NFL.2023.10.09.49ers.Vs.Cowboys.UNCUT.1080p.WEB.H264-SPORTSNET\n"
"Neighbours.S39E012.2023-10-05.Episode.8915.1080p.AMZN.WEB-DL.DDP2.0.H.264-SDCC \n"
"DFL.Supercup.2023 08 12.Bayern.Munchen.vs.RB.Leipzig.HDTV.2160p.AAC2.0.HEVC.mkv\n"
"The Late Show with Stephen Colbert (2015) - 2023-10-05 - Bob Odenkirk Fortune Feimster [2.0 WEBDL-1080p][x264]-EDITH.mkv\n"
"Anger Management (2012) - S02E15 - Charlies Patients Hook Up [WEBDL-1080p][AC3 5.1][h264]-BS.mkv\n"
"Ahsoka (2023) - S01E01 - Part One Master and Apprentice [DSNP WEBDL-1080p][EAC3 Atmos 5.1][h264]-NTb.mkv'\n"
"Loki - S01E01 - Glorious Purpose [DSNP WEBDL-1080p Proper][EAC3 Atmos 5.1][h264]-TOMMY.mkv'\n"
"Family - Guy (1999) - S01E01 - Death Has a Shadow [DSNP WEBDL-1080p][AAC 2.0][h264]-PHOENiX.mkv'\n"
"Neighbours.S39E012.2023-10-05.Episode.8915.1080p.AMZN.WEB-DL.DDP2.0.H.264-SDCC\n"
"Rick and Morty (2013) - S06E06 - JuRicksic Mort [HMAX DD 5.1 WEBDL-1080p][x264]-NTb.mkv\n"
"1923.S01E01.1080p.BluRay.TrueHD5.1.H.264-SLIPSTREAM \n"
"11.22.63.S01E01.2160p.WEB-DL.DDP5.1.H.265-NiXON\n\n"
"1923.S01.1080p.BluRay.TrueHD5.1.H.264-SLIPSTREAM \n"
"11.22.63.S01.2160p.WEB-DL.DDP5.1.H.265-NiXON\n"
"Hello.World.S01.ntb.mkv\n"
"Hello.World.S01 - S03.ntb.mkv\n"
"Hello.World.S1.ntb.mkv\n"
"Hello.World.S01 S03.ntb.mkv\n"
"Hello.World.S01.Extras.ntb.mkv\n"
"Hello_World_S01_S02.ntb.mkv\n"
"Hello_World_S01-S03_ntb.mkv\n"
"Hello_World_S1_ntb.mkv\n\n"
"Hello.World.S1E03.ntb.mkv\n"
"Hello.World.S031 E01.ntb.mkv\n"
"Hello_World_S01E01_ntb.mkv\n"
"Hello_World_S1E03_ntb.mkv\n"
"Hello.World.S01.E01.ntb.mkv\n"
"Hello_World_S01_E01_ntb.mkv")
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