gpt4 book ai didi

ruby - 如何在 Swift 中创建类似于 Ruby 中的扫描的函数

转载 作者:搜寻专家 更新时间:2023-11-01 06:22:57 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com