[英]Swift 3.1 Get a range between two char?
我顯然做錯了什么,因為這對我做了以下事情已經花了很長時間:(下面的游樂場代碼)。
注意:Swift 3.1~
我只想從piz(123)zazz
獲得123
let aString = "piz(123)zazz"
let startBracket: Character = "("
if let idx1 = aString.characters.index(of: startBracket) {
let pos1 = aString.characters.distance(from: aString.startIndex, to: idx1)
print("Found \(startBracket) at position \(pos1)")
}
else {
print("Not found")
}
let endBracket: Character = ")"
if let idx2 = aString.characters.index(of: endBracket) {
let pos2 = aString.characters.distance(from: aString.startIndex, to: idx2)
print("Found \(startBracket) at position \(pos2)")
}
else {
print("Not found")
}
let range = pos1..<pos2 // << this is not working, I give up!!!
let result_1 = aString.substring(with: range)
它更容易:
(
在字符串中)范圍的upperBound
結束索引是lowerBound
的范圍的)
字符串中的
let aString = "piz(123)zazz" if let openParenthesisRange = aString.range(of: "("), let closeParenthesisRange = aString.range(of: ")", range: openParenthesisRange.upperBound..<aString.endIndex) { let range = openParenthesisRange.upperBound..<closeParenthesisRange.lowerBound let result = aString.substring(with: range) print(result) } else { print("Not found") }
或者正則表達式,它是更多的代碼,但它更通用
let string = "piz(123)zazz"
let pattern = "\\((\\d+)\\)" // searches for 0 ore more digits between parentheses
do {
let regex = try NSRegularExpression(pattern: pattern)
if let match = regex.firstMatch(in: string, range: NSRange(location: 0, length: string.utf16.count)) {
let range = match.rangeAt(1)
let start = string.index(string.startIndex, offsetBy: range.location)
let end = string.index(start, offsetBy: range.length)
print(string.substring(with: start..<end))
} else {
print("Not Found")
}
} catch {
print("Regex Error:", error)
}
當您嘗試使用時,您的pos1
和pos2
超出了范圍。 它們都在if
塊中定義,並且它們的范圍自己結束。
我建議在頂部聲明它們以使它們在范圍內。
let aString = "piz(123)zazz"
let pos1: Int? // You don't need optional here but I prefer it
let pos2: Int?
.
.
.
if let p1 = pos1, p2 = pos2 { // Optional Chaining
let range = pos1..<pos2
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.