给定以下字符串:

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

如何提取"Phone:"之后的所有内容

所以在这种情况下我想要

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相关问答推荐

阴影动画的动画不流畅

传递给SWIFT ResultBuilder的闭包中结果类型的对象

NSWindow中以编程方式创建的TextField快捷方式与SwiftUI

是否在字符串属性上搜索数组和子数组?

声明一个协议时使用和不使用任何单词有什么区别?

快速并行读取进程 standardOutput 和 standardError 而不会阻塞

SwiftUI 中的同一个 ForEach 中是否可以有 2 个数组?

我如何在 swift 中的 viewdidload 之前进行委托?

PassthroughSubject 的 AsyncPublisher 值属性未生成所有值

Swift Random Float Fatal Error:在无限范围内没有均匀分布

如何在 UITableView 中点击图片和标题

如何制作具有 2 个视图的 3D 旋转动画?

SwiftUI - Select 器没有 Select 值

SwiftUI Preview 不适用于 Core Data

您可以在运行时访问 Picker 元素并更改它们的 colored颜色 吗

单击按钮后的计时器发布者初始化计时器

如何在 RxSwift 中获取 controlEvent 类型?

如何获取 NSRunningApplication 的参数?

如何在 SwiftUI 中通过按钮点击一次为一个更改设置动画?

iOS Swift - 如何更改表格视图的背景 colored颜色 ?