从字符串中抓取特定的单词
Grab particular words from a string
我有 JSON 数据,我试图只抓取包括年龄在内的单词。我计划然后抓住 21 岁以上的所有年龄段。我已经尽可能将字符串中的每个单词分隔为一个单独的字符串,但我看不到找到遍历每个年龄段的方法。
let JSON = """
{"data":"key=IAfpK, age=58, key=WNVdi, age=4, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76"}
"""
struct DataObject: Decodable {
let data: String
}
func grabAges() {
let jsonData = JSON.data(using: .utf8)!
let dataObject: DataObject = try! JSONDecoder().decode(DataObject.self, from: jsonData)
var arr = dataObject.data.components(separatedBy: ",")
//print(dataObject.data)
}
正则表达式可以很好地完成,不需要拆分字符串。
模式 "\bage=(\d+)"
搜索字符串 age=
(在单词的开头)后跟一个或多个数字并捕获数字部分。
使用 compactMap
,您可以将搜索结果映射(和过滤)到 Int
个值
let json = """
{"data":"key=IAfpK, age=58, key=WNVdi, age=4, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76"}
"""
struct DataObject: Decodable {
let data: String
}
func grabAges() {
let jsonData = json.data(using: .utf8)!
let dataObject = try! JSONDecoder().decode(DataObject.self, from: jsonData)
let data = dataObject.data
let regex = try! NSRegularExpression(pattern: #"\bage=(\d+)"#)
let ages = regex.matches(in: data, range: NSRange(data.startIndex..., in: data))
.compactMap { match -> Int? in
guard let range = Range(match.range(at: 1), in: data),
let age = Int(data[range]), age > 21 else { return nil }
return age
}
print(ages)
}
grabAges()
我有 JSON 数据,我试图只抓取包括年龄在内的单词。我计划然后抓住 21 岁以上的所有年龄段。我已经尽可能将字符串中的每个单词分隔为一个单独的字符串,但我看不到找到遍历每个年龄段的方法。
let JSON = """
{"data":"key=IAfpK, age=58, key=WNVdi, age=4, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76"}
"""
struct DataObject: Decodable {
let data: String
}
func grabAges() {
let jsonData = JSON.data(using: .utf8)!
let dataObject: DataObject = try! JSONDecoder().decode(DataObject.self, from: jsonData)
var arr = dataObject.data.components(separatedBy: ",")
//print(dataObject.data)
}
正则表达式可以很好地完成,不需要拆分字符串。
模式 "\bage=(\d+)"
搜索字符串 age=
(在单词的开头)后跟一个或多个数字并捕获数字部分。
使用 compactMap
,您可以将搜索结果映射(和过滤)到 Int
个值
let json = """
{"data":"key=IAfpK, age=58, key=WNVdi, age=4, key=jp9zt, age=47, key=0Sr4C, age=68, key=CGEqo, age=76"}
"""
struct DataObject: Decodable {
let data: String
}
func grabAges() {
let jsonData = json.data(using: .utf8)!
let dataObject = try! JSONDecoder().decode(DataObject.self, from: jsonData)
let data = dataObject.data
let regex = try! NSRegularExpression(pattern: #"\bage=(\d+)"#)
let ages = regex.matches(in: data, range: NSRange(data.startIndex..., in: data))
.compactMap { match -> Int? in
guard let range = Range(match.range(at: 1), in: data),
let age = Int(data[range]), age > 21 else { return nil }
return age
}
print(ages)
}
grabAges()