如何在swift中提取括号内的数据?

时间:2017-06-12 06:54:24

标签: swift swift3

我正试图在swift中的括号内提取一些数字。

EG。

var accname = "(1234) some random texts"

如何从var获得1234?括号中的数字没有固定长度。它可以是(12)或(12345)。

这就是我试过的

var accname = ""
for i in accname.characters.indices[(accname.startIndex)..<accname.endIndex]{

       while accname[i] != ")"{
                accnumb.append(accname[i])
        }
        }

3 个答案:

答案 0 :(得分:3)

您可以使用@oisdk建议的以下扩展程序:

var demoText = "(1234)  e e e er er e"

extension String {
func slice(from: String, to: String) -> String? {

    return (range(of: from)?.upperBound).flatMap { substringFrom in
        (range(of: to, range: substringFrom..<endIndex)?.lowerBound).map { substringTo in
            substring(with: substringFrom..<substringTo)
        }
    }
}
}


let sliced  = demoText.slice(from: "(", to: ")")

答案 1 :(得分:0)

您的代码存在一些问题:

  • while替换为if
  • 使用for ... in ...表示实际字符,而不是索引
  • 删除第一个字符
  • 遇到)
  • 后立即停止整个逻辑

这导致以下代码而不改变您的基本逻辑:

let accname = "(1234) some random texts"
var accnumb = ""
for char in accname.characters.dropFirst() {
    if char != ")" {
        accnumb.append(char)
    } else {
        break
    }
}
print(accnumb) // 1234

答案 2 :(得分:0)

这是您可以使用的另一个扩展,它创建一个包含所有数值的字符串,并将其用于过滤:

extension String {
    var numericString: String? {
        let numericValues = "1234567890"
        let filteredString = self.characters.filter {
            return numericValues.contains(String($0))
        }
        guard filteredString.count > 0 else {
            return nil
        }
        return String(filteredString)
    }
}

let value = "(1234)"
let numericString = value.numericString // "1234"

let badValue = "no numbers here"
let badNumericString = badValue.numericString // nil

let anotherValue = "numbers 2 and text 4here 56"    
let anotherString = anotherValue.numericString // "2456"

希望有所帮助。