如何从Swift 4中的字符串中提取未知子字符串?

时间:2018-03-06 00:18:36

标签: swift string macos swift4

使用swift 4,我需要解析一个字符串以获得总是不同的子字符串。例如:

let str = "[33376:7824459] Device Sarah's Phone (Hardware: D21AP, ECID: 8481036056622, UDID: 76e6bc436fdcfd6c4e39c11ed2fe9236bb4ec, Serial: F2LVP5JCLY)"

let strRange = str.range(of: "(?<=Device )(?= (Hardware)", options: .regularExpression)
print(strRange!)

我认为这会输出&#34; Sarah的电话&#34;

我没有在此代码中收到任何错误,但它也无效。我做错了什么?

1 个答案:

答案 0 :(得分:3)

几个问题:

  1. 你在这里有一个前瞻和后视,但没有任何实际上可以匹配任何角色的东西,所以除了空字符串之外它永远不会匹配任何东西。

  2. 你没有在前瞻中正确地逃避括号。

  3. 您应该使用if letguard let而不是!来打开可选项。否则,当您遇到与模式不匹配的输入字符串时,您将会崩溃。

  4. 我不确定您为什么期望print(strRange)输出文字。 strRange是一个范围,而不是字符串或子字符串。

  5. 此示例将解决您的问题:

    import Foundation
    
    let str = "[33376:7824459] Device Sarah's Phone (Hardware: D21AP, ECID: 8481036056622, UDID: 76e6bc436fdcfd6c4e39c11ed2fe9236bb4ec, Serial: F2LVP5JCLY)"
    
    if let strRange = str.range(of: "(?<=Device ).*(?= \\(Hardware)", options: .regularExpression) {
        print(str[strRange])
    } else {
        print("Not Found")
    }