用NSRegularExpression结果将字符串子字符串化的正确方法是什么?

时间:2019-05-19 12:00:49

标签: swift

此功能有问题:

    private func regexFirstGroup(in intext: String, pattern: String) -> String? {
    do {
        let nsrange = NSRange(intext.startIndex..<intext.endIndex, in: intext)
        let regex = try NSRegularExpression(pattern: pattern, options: [NSRegularExpression.Options.dotMatchesLineSeparators])
        if let match = regex.firstMatch(in: intext, options: [], range: nsrange) {
            guard let mrange = Range(match.range(at: 1), in:intext) else {
                return nil
            }
            return intext.substring(with: mrange)
        }
    } catch {
        print("Pattern \(pattern) compiled with error: \(error)")
        return nil
    }
    return nil
}

行与

return intext.substring(with: mrange)

给出了已弃用的警告: 不推荐使用“ substring(with :)”:请使用字符串切片下标。

当我将其切换为预期的swift5方式时:

return intext[mrange]

它给出一个错误: 下标'subscript(_ :)'要求类型'String.Index'和'Int'等价

这很奇怪,因为下标应该与String.Index类型一起使用,并在快速帮助中检查mrange常量,显示:

Declaration
let mrange: Range<String.Index>

我没有使用Import Foundation atm。

1 个答案:

答案 0 :(得分:1)

您应该使用subscript(_:)

return String(intext[mrange])