Swift 斯威夫特:如何在一组特定的字符之后获取所有内容

Swift 斯威夫特:如何在一组特定的字符之后获取所有内容,swift,swift2,Swift,Swift2,给定以下字符串: 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.substringToInd

给定以下字符串:

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
    }

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

只需使用
func substringFromIndex
,但将索引的长度增加
“Phone:”
在Swift 4中,使用
上限
和下标运算符和打开范围:

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,请参阅。

了解一种非常基本的方法,并假设您可以保证可以使用的字符串的格式。
。组件(以:“Phone:”分隔)
,因此之前的任何内容都将位于索引0和索引1之后

var snippet = "1111 West Main Street Beverly Hills, CA 90210 Phone: 123.456.7891"
let phoneNumber = snippet.components(separatedBy: "Phone: ")[1]
print(phoneNumber)
//prints everything that appears after "Phone: " in your snippet string
//"123.456.7891"
检查一下这个

let delimiter = ", "
let newstr = "Hello, playground"
let token = newstr.components(separatedBy: delimiter)
let first = token[0]
let last = token[1]
print("\(first) \(last)")

让phone=snippet.substringfromfromindex(range.endIndex)第一个代码段返回我们
String.SubSequence
。要获得
String
,我们应该使用第二个代码段,它修剪空白并返回
String
,对吗?此代码不符合问题中的要求。输入中出现多个“Phone:”将失败。问题未说明多次出现“Phone:”。所以你的问题可能并不存在。引用我自己的回答“假设你能保证字符串的格式”