使用swift 3将字符串从开始位置剪切到结束位置

时间:2017-08-17 09:28:46

标签: ios regex swift string

我的字符串是字符串\ string example

"some sting with random length\233"

我想删除最后一个\并获取其后的值,因此结果将是

"some sting with random length"
"233"

我试过这段代码,但它没有用

let regex = try! NSRegularExpression(pattern: "\\\s*(\\S[^,]*)$")
if let match = regex.firstMatch(in: string, range: string.nsRange) {
    let result = string.substring(with: match.rangeAt(1))
}

2 个答案:

答案 0 :(得分:2)

您没有正确地将How to get substring after last occurrence of character in string: Swift IOS的模式调整到您的案例中。 逗号的两个实例必须替换为反斜杠, 那必须是"双重转义":

let regex = try! NSRegularExpression(pattern: "\\\\\\s*(\\S[^\\\\]*)$")

(曾被解释为正则表达式模式中的字面反斜杠,和 再一次在Swift字符串文字的定义中。)

然而,更简单的解决方案是找到最后一次出现的 反斜杠并从该位置提取后缀:

let string = "some sting with random length\\233"
let separator = "\\" // A single(!) backslash

if let r = string.range(of: separator, options: .backwards) {
    let prefix = string.substring(to: r.lowerBound)
    let suffix = string.substring(from: r.upperBound)

    print(prefix)  // some sting with random length
    print(suffix)  // 233
}

Swift 4的更新:

if let r = string.range(of: separator, options: .backwards) {
    let prefix = string[..<r.lowerBound]
    let suffix = string[r.upperBound...]

    print(prefix)  // some sting with random length
    print(suffix)  // 233
}

prefixsuffixString.SubSequence,可以使用 在许多地方而不是String。如有必要,请创建真实 字符串:

    let prefix = String(string[..<r.lowerBound])
    let suffix = String(string[r.upperBound...])

答案 1 :(得分:0)

你可以用正则表达式做到这一点,但我认为这个解决方案更好:

yourString.components(separatedBy: "\\").last!

它将\的字符串拆分为分隔符并获取最后一次拆分。