gpt4 book ai didi

swift - Swift 中的正则表达式匹配

转载 作者:行者123 更新时间:2023-11-30 10:08:22 24 4
gpt4 key购买 nike

我使用 Swift extract regex matches 中的代码

func matchesForRegexInText(regex: String!, text: String!) -> [String] {

do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = text as NSString
let results = regex.matchesInString(text,
options: [], range: NSMakeRange(0, nsString.length))
return results.map { nsString.substringWithRange($0.range)}
} catch let error as NSError {
print("invalid regex: \(error.localizedDescription)")
return []
}
}

我尝试匹配此模式(示例模式)"^([a-z]+).*?(\d+)$"如果我将它用于字符串 "abc.....123" 我会得到这个完整的字符串...但我想获取字符串数组 ["abc", "123"]

最佳答案

您必须使用第一个匹配项的 rangeAtIndex() 获取捕获组的子范围(分别是括号内的正则表达式的表达式)。
由于完整字符串的范围位于索引 0,因此从索引 1 开始循环。

func matchesForRegexInText(regex: String, text: String) -> [String] {
var result = [String]()
do {
let regex = try NSRegularExpression(pattern: regex, options: [])
let nsString = text as NSString
if let match = regex.firstMatchInString(text, options: [], range: NSMakeRange(0, nsString.length)) {
for i in 1..<match.numberOfRanges {
result.append(nsString.substringWithRange(match.rangeAtIndex(i)))
}
}
} catch let error as NSError {
print("invalid regex: \(error.localizedDescription)")
}
return result
}

PS:并非 Swift 中的所有内容都需要 ?!。参数字符串中的感叹号没有任何意义,因为它们实际上都不被视为可选。

关于swift - Swift 中的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34753876/

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