我有一個字符串:"Hey @username that's funny"
。對於給定的字符串,如何搜索字符串以返回所有範圍的字符串,其中第一個字符爲@
,最後一個字符爲以獲取
username
?帶字符串中第一個和最後一個字符的返回範圍
我想我可以得到@的所有索引,並獲得下一個空格字符的substringToIndex
,但想知道是否有更簡單的方法。
我有一個字符串:"Hey @username that's funny"
。對於給定的字符串,如何搜索字符串以返回所有範圍的字符串,其中第一個字符爲@
,最後一個字符爲以獲取
username
?帶字符串中第一個和最後一個字符的返回範圍
我想我可以得到@的所有索引,並獲得下一個空格字符的substringToIndex
,但想知道是否有更簡單的方法。
如果您的用戶名只能包含字母和數字,你可以使用這個正則表達式:
let s = "Hey @username123 that's funny"
if let r = s.rangeOfString("@\\w+", options: NSStringCompareOptions.RegularExpressionSearch) {
let name = s.substringWithRange(r) // @username123"
}
@弗拉基米爾的答案是正確的,但如果你想找到「用戶名」中多次出現,這也應該工作:
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))
}
這在技術上是正確的,所以我責怪自己沒有更清楚。但是如果有多個「用戶名」,那麼rangeOfString只會返回第一個匹配項。有沒有辦法捕捉所有的rangeOfString? – chicobermuda
dperk,你可以使用NSRegularExpression及其matchesInString方法 – Vladimir