Swift:如何在特定字符集之后获取所有内容

标签 swift swift2

给定以下字符串:

var snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891"

如何提取“电话:”之后的所有内容

所以在这种情况下我想要

phone = 123.456.7891

我已经试过了:

    if let range = snippet.rangeOfString("Phone:") {

        let phone = snippet.substringToIndex(range.startIndex)
        print(phone) // prints 1111 West Main Street Beverly Hills, CA 90210
    }

但这会打印之前的所有内容,我需要之后的所有内容。

最佳答案

在 Swift 4 中,使用 upperBound 和下标运算符以及开放范围:

let snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891"

if let range = snippet.range(of: "Phone: ") {
    let phone = snippet[range.upperBound...]
    print(phone) // prints "123.456.7891"
}

或者考虑修剪空白:

if let range = snippet.range(of: "Phone:") {
    let phone = snippet[range.upperBound...].trimmingCharacters(in: .whitespaces)
    print(phone) // prints "123.456.7891"
}

顺便说一下,如果你想同时获取两者,正则表达式可以做到这一点:

let snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891"
let regex = try! NSRegularExpression(pattern: #"^(.*?)\s*Phone:\s*(.*)$"#, options: .caseInsensitive)
if let match = regex.firstMatch(in: snippet, range: NSRange(snippet.startIndex..., in: snippet)) {
    let address = snippet[Range(match.range(at: 1), in: snippet)!]
    let phone = snippet[Range(match.range(at: 2), in: snippet)!]
}

有关 Swift 的早期版本,请参阅 previous revision of this answer

关于Swift:如何在特定字符集之后获取所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073610/

相关文章:

ios - 在 gamescene.sks 中创建带边界的空节点

SwiftUI - 如何使 NavigationView 不影响几何读取器的位置

arrays - 泛型数组不接受空数组作为输入

swift - 在 Swift 2 中,禁用 NSMenuItem 的正确方法是什么?

ios - Swift 3 不安全指针

ios - Swift 中的 socket.io 出现意外的奇怪行为

ios - Pager View Controller 的 Root View 的大小与后续 View Controller 的大小不同

ios - NSMutableArray addObject 覆盖数据 SWIFT

swift - 在 AnyObject Swift 2.0 中使用数据

ios - 'observeSingleEvent(: with:)