2017-06-12 108 views
-1

我試圖在快速提取括號內的一些數字。如何在swift中提取括號內的數據?

例如,

var accname = "(1234) some random texts" 

如何從var s中獲取1234?括號中的數字沒有固定的長度。它可以是(12)或(12345)。

這是我曾嘗試

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

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

相關:https://stackoverflow.com/questions/36941365/swift-regex-for-extracting-words-between-parenthesis,https://stackoverflow.com/questions/33693021/finding-text-between-parentheses -in-迅速。 –

回答

1

那麼你可以使用下面的擴展通過@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: ")") 
0

有幾件事情你的代碼錯誤:

  • if替換while
  • 使用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 
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" 

希望有幫助。