我是新手,它正在寻找一种基于正则表达式匹配的将字符串分离为数组的有效方法。
在Ruby中,它是一个单行命令
irb(main):006:0> number = "(123) 456-7890"
=> "(123) 456-7890"
irb(main):007:0> number.scan(/(\w+)/).join()
=> "1234567890"
irb(main):008:0>
在Swift中,它很复杂,我从这里的答案中使用了此函数。Swift提取正则表达式匹配项,将组件分成String数组。联接的工作方式相同,因此至少是好的。快速有扫描功能吗?如果没有,如何创建可以使用的全局函数。
func matchesForRegexInText(regex: String!, text: String!) -> [String] {
let regex = NSRegularExpression(pattern: regex,
options: nil, error: nil)!
let nsString = text as NSString
let results = regex.matchesInString(nsString as String,
options: nil, range: NSMakeRange(0, nsString.length))
as! [NSTextCheckingResult]
return map(results) { nsString.substringWithRange($0.range)}
}
var number = "(123) (456) 7890"
var wordArr = matchesForRegexInText("\\w+", number)
join("",wordArr) #> "1234567890"
String
没有类似的scan()
方法,但是您可以使用相同的方法轻松定义一个方法:
extension String {
func scan(regex : String) -> [String] {
let regex = NSRegularExpression(pattern: regex,
options: nil, error: nil)!
let nsString = self as NSString
let results = regex.matchesInString(nsString as String,
options: nil, range: NSMakeRange(0, nsString.length))
as! [NSTextCheckingResult]
return map(results) { nsString.substringWithRange($0.range)}
}
}
例子:
let number = "(123) (456) 7890"
let wordArr = number.scan("\\w+")
println(wordArr) // [123, 456, 7890]
let digitsOnly = "".join(wordArr)
println(digitsOnly) // 1234567890
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句