作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 swift 的新手,正在寻找一种有效的方法来根据匹配的正则表达式将字符串分成数组。
在 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 extract regex matches 的答案中的这个函数将组件分离到一个字符串数组中。 join 的工作方式相同,所以这至少很好。 swift有扫描功能吗?如果没有,我如何创建一个我可以使用的全局函数。
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
关于ruby - 如何在 Swift 中创建类似于 Ruby 中的扫描的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30006254/
我是一名优秀的程序员,十分优秀!