Проверьте, содержит ли четырехзначный номер года в сценарии Apple - PullRequest
0 голосов
/ 21 января 2020

Сейчас я работаю над file-rename-applescript-project. Вот пример: The.Fantasy.1997.DVDRip.XviD-ETRG.avi.

Теперь я хочу проверить, содержит ли имя файла четырехзначный номер года. В данном случае это 1997 год. Номер года ДОЛЖЕН начинаться с 19 или 20 и ДОЛЖЕН содержать четыре цифры.

Если результат верен, я сделаю что-то, если ложь, я сделаю что-то еще. Я пытаюсь использовать регулярные выражения, но не могу найти решение. Это вне моего диапазона. Теперь я ищу помощи здесь, спасибо миллион.

Ответы [ 3 ]

1 голос
/ 21 января 2020

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

(*
    This first bit breaks the string up into a list of words by cutting the string 
    at the period delimiter.
*)
set tid to my text item delimiters
set my text item delimiters to "."
set bits_list to text items of file_name_string
set my text item delimiters to tid

(*
    This repeat loop goes though the list of words and tests them (first) to see 
    if it can be converted to an integer, and (second) whether the number is between
    1900 and 2100. If so, it chooses it as the year.
*)
repeat with this_item in bits_list
    try
        set possibleYear to this_item as integer
        if possibleYear ≥ 1900 and possibleYear < 2100 then
            -- do what you want with the year value here
            exit repeat
        end if
    end try
end repeat

Конечно, это не будет работать должным образом, если в имени есть число (например, "2001 .A.Space.Odyssey.1968.avi ") или если имя файла имеет разные разделители (например, пробел или da sh). Но вы также столкнетесь с этими проблемами, используя регулярные выражения, так что ...

1 голос
/ 21 января 2020

Поскольку вы только хотите проверить, содержит ли имя файла четырехточечное число git в диапазоне 1900-2099, вы можете сделать это очень просто, определив такой обработчик:

on hasYearInTitle(filmTitle as text)
    repeat with yyyy from 1900 to 2099
        if yyyy is in the filmTitle then return true
    end repeat

    return false
end hasYearInTitle

Затем вы можете назвать этот обработчик и передать ему название фильма, например:

hasYearInTitle("The.Fantasy.1997.DVDRip.XviD-ETRG.avi") --> true
hasYearInTitle("The.Fantasy.197.DVDRip.XviD-ETRG.avi") --> false
hasYearInTitle("2001.A.Space.Odyssey.1968.avi") --> true
hasYearInTitle("2001.A.Space.Odyssey.avi") --> true (hm...)

В качестве дополнительного примечания, фильмы, проиндексированные newznab серверы следуют строгому протоколу именования файлов, который позволяет медиасерверу (на вашем компьютере) легко анализировать его и быстро извлекать информацию, относящуюся к (как видно из вашего имени файла примера): название фильма, дата выпуска фильма, источник материал, качество кодирования, формат кодирования (код c), группа релизов и формат файла, в котором они содержатся.

Хотя некоторые имена файлов содержат больше информации, а некоторые они должны всегда появляются в установленном порядке. Это делает их очень простыми для анализа в случае необходимости, но если вы хотите создать организованную мультимедийную библиотеку, вам лучше всего использовать мультимедийный сервер, для которого доступны отличные, бесплатные и давно доступные варианты программного обеспечения. для macOS и практически любой другой операционной системы.

0 голосов
/ 21 января 2020

Регулярное выражение .+\.(?:19:20)\d{2}\..+ должно сделать это

Разбивка:

.+ 1 или более любых символов
\. Фактическая точка
(?:19|20) строка «19» или «20» (группа без захвата)
\d{2} Ровно две цифры
\. Фактическая точка
.+ 1 или более любых символов

...