RegEx для буквенно-цифровых текстовых строк до специальных шаблонов - PullRequest
1 голос
/ 18 апреля 2019

У меня есть список строк с определенным форматом, и мне нужна только часть этих элементов.

Ввод

my_list = ['The Price Is Right S47E141 720p WEB x264-W4F', 'Breakthrough-The Ideas That Changed the World S01E01 480p x264-mSD',
'The Kid Who Would Be King 2019 DVDR-JFKDVD', 'American Housewife S03E18 Phone Free Day 1080p AMZN WEB-DL DDP5 1 H 264-NTb',
'VICE News Tonight 2019 04 16 720p AMZN WEB-DL DDP2 0 H 264-monkee','The Flash 2014 S05E18 Godspeed 720p AMZN WEB-DL DDP5 1 H 264-NTb',
'The Rachel Maddow Show 2019 04 16 720p MNBC WEB-DL AAC2 0 x264-BTW','Lets Make A Deal 2009 S10E142 XviD-AFG']

Попытка RegEx:

try:
    try:
        def get_rls(t):
            w = re.match(".*\d{4} \d{2} \d{2} ", t)
            # w = re.match(".*S\d+E\d+", t)
            if not w: raise Exception("Error For Regular Expression")
            return w.group(0)

        regular_case = [my_list ]
        for w in regular_case:
            Regular_part = get_rls(w)
            print(">>>> Movie Regular Part contains Year/Mon/Day : ", Regular_part)         
    except:
        try:
            def get_rls(t):
                # w = re.match(".*\d ", t)
                w = re.match(".*S\d+E\d+", t)
                if not w: raise Exception("Error For Regular Expression")
                return w.group(0)


            regular_case = [my_list ]
            for w in regular_case:
                Regular_part = get_rls(w)
                print(">>>> Movie Regular Part contains S0E0 : ", Regular_part)             

        except:
            def get_rls(t):
                w = re.match(".*\d{4} ", t)
                # w = re.match(".*S\d+E\d+", t)
                if not w: raise Exception("Error For Regular Expression")
                return w.group(0)


            regular_case = [my_list ]
            for w in regular_case:
                Regular_part = get_rls(w)
                print(">>>> Movie Regular Part contains Year : ", Regular_part)

except:
    print(">>>> Weard Release Name! Pass the Regular part ")
    Regular_part = my_list 

Проблема в том, что мои коды регулярных выражений просто могут получить один элемент и решают использовать, какой RegEx полезен и печататьрегулярное выражение, и мне нужен код RegEx, способный получить список и работать с каждым отдельным элементом, например, получить первый элемент и решить, какой из них хорош.

Лучший результат должен быть таким, как следующий список:

my_list = ['The Price Is Right S47E141', 'Breakthrough-The Ideas That Changed the World S01E01',
'The Kid Who Would Be King 2019 DVDR-JFKDVD', 'American Housewife S03E18 ',
'VICE News Tonight 2019 04 16','The Flash 2014 S05E18',
'The Rachel Maddow Show 2019 04 16 ','Lets Make A Deal 2009 S10E142']

1 Ответ

0 голосов
/ 19 апреля 2019

Этот RegEx - не полный правильный ответ, но, возможно, он поможет вам найти общий способ обработки вашего ввода текста.Возможно, RegEx не был бы лучшим способом решения этой проблемы:

^.+?(?:[SE0-9]+)|(?:\s[A-Z]{4}\-[A-Z]{1,})|(?:.+[0-9]{4}\s[0-9]{2}\s[0-9]{2})|(?:\s[SE0-9]{6,10})

enter image description here

SE шаблоны и date шаблоны просты дляэто RegEx.Проблема, с которой вы можете столкнуться, это случайные годы, такие как 2014, 2009 и 2019, которые вы можете принять во внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...