2017-08-17 35 views
0

位置我有一個字符串與格式字符串\串例如切一個字符串從起始位置到結束與SWIFT 3

"some sting with random length\233" 

我想刪除最後\和之後獲得的價值,那麼結果會是

"some sting with random length" 
"233" 

我想這個代碼,但它不工作

let regex = try! NSRegularExpression(pattern: "\\\s*(\\S[^,]*)$") 
if let match = regex.firstMatch(in: string, range: string.nsRange) { 
    let result = string.substring(with: match.rangeAt(1)) 
} 
+0

對不起,你的意思是你'「有些刺痛隨機長度\\ 233」'?反斜槓必須在字符串文字中加倍以表示單個文字反斜槓。 –

+0

不,只有一個\。我嘗試了完全相同的解決方案,你標記和它不工作,這就是爲什麼我發佈的問題 –

+2

事情是'2'實際上是'2'。你的*字符串*不包含反斜槓,因此沒有任何東西需要分割或匹配。同樣,一個文字「''''應該在Swift字符串文字中用''''定義。這就是我可以在這裏說的。 –

回答

1

您沒有正確地將How to get substring after last occurrence of character in string: Swift IOS中的模式適用於您的案例。 逗號的兩個實例必須由反斜槓, 被替換,並且必須是「雙重逸出」:

let regex = try! NSRegularExpression(pattern: "\\\\\\s*(\\S[^\\\\]*)$") 

(一旦被解釋爲在正則表達式模式反斜線和 再次在一個Swift字符串文字的定義)。

然而,一個簡單的解決方案是找到 反斜線最後一次出現,並提取該位置的後綴:

let string = "some sting with random length\\233" 
let separator = "\\" // A single(!) backslash 

if let r = string.range(of: separator, options: .backwards) { 
    let prefix = string.substring(to: r.lowerBound) 
    let suffix = string.substring(from: r.upperBound) 

    print(prefix) // some sting with random length 
    print(suffix) // 233 
} 

更新斯威夫特4:

if let r = string.range(of: separator, options: .backwards) { 
    let prefix = string[..<r.lowerBound] 
    let suffix = string[r.upperBound...] 

    print(prefix) // some sting with random length 
    print(suffix) // 233 
} 

prefixsuffixString.SubSequence,其可以用於 中許多地方而不是String。如有必要,創建一個真正 字符串:

let prefix = String(string[..<r.lowerBound]) 
    let suffix = String(string[r.upperBound...]) 
0

你可以這樣做與正則表達式,但我認爲這個解決方案是更好的:

yourString.components(separatedBy: "\\").last! 

它分裂與\作爲分隔字符串,並得到最後的分割。

相關問題