我在使用此功能时遇到问题:
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。
最佳答案
你应该使用 subscript(_:)
return String(intext[mrange])
关于swift - 使用 NSRegularExpression 结果对字符串进行子字符串化的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56207584/