我正试图在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])
}
}
答案 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"
希望有所帮助。