ios - 如果 .srt 文件包含多行字幕文本,如何在 swift 中使用 Scanner 解析它?

标签 ios swift nsscanner

我的.srt文件内容如下:

1<br>
00:00:00,000 --> 00:00:01,000 <br>
This is the first line: <br>
and it has a secondary line,<br>
it may have more lines

2<br>
00:00:01,000 --> 00:00:02,000<br>
This is the second line<br>
it may have more lines<br>

3<br>
00:00:02,000 --> 00:00:03,000<br>
This is the last line<br>
and it has a secondary line too,<br>
it may have more lines

我正在使用扫描仪,但它没有得到如下正确解析:

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
}

最佳答案

考虑使用简单的正则表达式:

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]) }

我建议缓存正则表达式。

关于ios - 如果 .srt 文件包含多行字幕文本,如何在 swift 中使用 Scanner 解析它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50616447/

相关文章:

php - mysql_fetch_array() 带有奇怪的输出

ios - 3D 触控 : Presenting From Current VC

ios - 碰撞不起作用时的 SpriteKit 旋转

swift : Core Data join entity

ios - 在 UITextView 中创建一个可点击的文本部分

objective-c - iOS/Objective-C : Attempting to Scan a string for substrings which will be assigned to multiple NSStrings

ios - NSScanner 基于最后一次出现的子字符串 "@"

iphone - 当应用程序处于后台模式时,是否可以在 iPhone 中闪烁手电筒?

ios - 表达式太复杂,无法在合理的时间内解决 (xcode)

objective-c - 使用 NSScanner 解析字符串