2016-02-16 156 views
3

我有一個字符串:"Hey @username that's funny"。對於給定的字符串,如何搜索字符串以返回所有範圍的字符串,其中第一個字符爲@,最後一個字符爲以獲取username帶字符串中第一個和最後一個字符的返回範圍

我想我可以得到@的所有索引,並獲得下一個空格字符的substringToIndex,但想知道是否有更簡單的方法。

回答

5

如果您的用戶名只能包含字母和數字,你可以使用這個正則表達式:

let s = "Hey @username123 that's funny" 

if let r = s.rangeOfString("@\\w+", options: NSStringCompareOptions.RegularExpressionSearch) { 
    let name = s.substringWithRange(r) // @username123" 
} 
+0

這在技術上是正確的,所以我責怪自己沒有更清楚。但是如果有多個「用戶名」,那麼rangeOfString只會返回第一個匹配項。有沒有辦法捕捉所有的rangeOfString? – chicobermuda

+0

dperk,你可以使用NSRegularExpression及其matchesInString方法 – Vladimir

1

@弗拉基米爾的答案是正確的,但如果你想找到「用戶名」中多次出現,這也應該工作:

let s = "Hey @username123 that's funny" 

    let ranges: [NSRange] 

    do { 
     // Create the regular expression. 
     let regex = try NSRegularExpression(pattern: "@\\w+", options: []) 

     // Use the regular expression to get an array of NSTextCheckingResult. 
     // Use map to extract the range from each result. 
     ranges = regex.matchesInString(s, options: [], range: NSMakeRange(0, s.characters.count)).map {$0.range} 
    } 
    catch { 
     // There was a problem creating the regular expression 
     ranges = [] 
    } 

    for range in ranges { 

     print((s as NSString).substringWithRange(range)) 

    } 
相關問題