Swift:如何在一组特定字符后获取所有内容 [英] Swift: How to get everything after a certain set of characters

查看:156
本文介绍了Swift:如何在一组特定字符后获取所有内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出以下字符串:

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

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

How can I extract everything that comes after "Phone:"

所以在这种情况下我想要

So in this case I want

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
    }

但这会打印所有内容,之后我需要所有内容.

But this prints everything BEFORE, I need everything AFTER.

推荐答案

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

In Swift 4, use upperBound and subscript operators and open range:

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"
}


顺便说一句,如果您尝试同时抓住两者,则正则表达式可以做到这一点:


By the way, if you're trying to grab both at the same time, a regular expression can do that:

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的早期版本,请参见此答案的先前版本.

这篇关于Swift:如何在一组特定字符后获取所有内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆