Как проанализировать файл .srt, если он содержит несколько строк текста субтитров, используя Scanner в swift? - PullRequest
0 голосов
/ 31 мая 2018

Содержимое моего файла .srt выглядит следующим образом:

1
00: 00: 00,000 -> 00: 00: 01,000
Это первая строка:
и имеетвторая строка,
может иметь больше строк

2
00: 00: 01,000 -> 00: 00: 02,000
Это вторая строка
может иметь больше строк

3
00: 00: 02,000 -> 00: 00: 03,000
Это последняя строка
, и она также имеет дополнительную строку,
можетесть больше строк

Я использую сканер, но он не обрабатывается следующим образом:

        var indexString: NSString?
        scanner.scanUpToCharacters(from: CharacterSet.newlines, into: &indexString)
        var startTimeString: NSString?
        scanner.scanUpTo(" --> ", into: &startTimeString)
        scanner.scanString("-->", into: nil)



        var endTimeString: NSString?
        scanner.scanUpToCharacters(from: CharacterSet.newlines, into: &endTimeString)



        var textString: NSString?
        scanner.scanUpTo("\n", into: &textString)
        if textString != nil {
            textString = (textString?.replacingOccurrences(of: "\r\n", with: " "))! as NSString
            textString = (textString?.trimmingCharacters(in: CharacterSet.whitespaces))! as NSString
        }

1 Ответ

0 голосов
/ 31 мая 2018

Рассмотрите возможность использования простого регулярного выражения:

let pattern = "(?<index>^\\d+$)\\n^(?<startTime>\\d\\d:[0-5]\\d:[0-5]\\d,\\d{1,3}) --> (?<endTime>\\d\\d:[0-5]\\d:[0-5]\\d,\\d{1,3})$\\n(?<text>(?:^.+$\\n?)+)"  

let regex = try NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)  
let matches = regex.matches(in: srt, range: NSRange(..<srt.endIndex, in: srt))
let firstTextRange = matches[0].range(withName: "text")
let firstText = Range(firstTextRange, in: srt).flatMap { range in String(srt[range]) }

Я рекомендую кэшировать регулярные выражения.

...