swift - 循环遍历源代码中的多个实例?

标签 swift string

我正在尝试从一些源代码中提取信息。

查看源代码:http://www.championcounter.com/mordekaiser

多次出现这样的情况:

alt="莫德凯撒反击利爪">

alt="莫德凯撒反击阿卡丽">

我想拔出“利爪”和“阿卡丽”。

我现在可以得到列表中的第一个人,在本例中是 Talon :

let sourceArray = sourcecode.components(separatedBy: "alt="Mordekaiser counters")
let sourceArray2 = sourceArray[1].components(separatedBy: ""/>div>")
let champ = sourceArray2[0]

我的问题是,这显然会像这样拆分源代码

利爪之前的一切--------利爪--------利爪之后的一切

我只是捕获了 Talon。

然后我将如何继续筛选源代码以获取所有都被相同“separatedBy”代码包围的下一个项目?

最佳答案

如果您首先使用正则表达式提取所有“计数器”信息,您将会轻松很多,就像这样(警告,这是 Swift 2.2,而不是 Swift 3):

let pattern = "alt=\".*?\""
let s = // source of the page
let exp = try! NSRegularExpression(pattern: pattern, options: [])
let res = exp.matchesInString(s, options: [], range: NSMakeRange(0,s.utf16.count))
for ares in res {
    print((s as NSString).substringWithRange(ares.range))
}
var alts = res.map {ares in (s as NSString).substringWithRange(ares.range)}
alts = alts.filter {($0 as NSString).containsString(" counters ")}
alts = alts.map {($0 as NSString).substringWithRange(NSMakeRange(5,$0.utf16.count-6))}

结果是一个字符串数组:

["Cassiopeia counters Mordekaiser", "Lux counters Mordekaiser", "Yorick counters Mordekaiser", "Xerath counters Mordekaiser", "Malzahar counters Mordekaiser", "Illaoi counters Mordekaiser", "Mordekaiser counters Talon", "Mordekaiser counters Malphite", "Mordekaiser counters Akali", "Mordekaiser counters Diana", "Mordekaiser counters Kassadin", "Mordekaiser counters Gragas"]

现在您已经有了可以开始以有用的方式解析成对的东西。

关于swift - 循环遍历源代码中的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39780990/

相关文章:

c# - 字符串解析,提取数字和字母

python - 从 txt 文件中删除一些词替换一些其他词

C++ Copy_if 使用 lambda

ios - 与包含它们的字符集相比,只有 2 个表情符号返回不正确的长度

objective-c - React Native 桥接在 swift 模块中有时为零

ios - SwiftUI 列表行在点击后更改其背景颜色

android - 如何将SpannableString写入parcel?

javascript - 从 javascript 正确添加到 json

ios - 以编程方式在特定时间 swift 从地址簿中删除联系人

ios - 如何在 Objective C pod 中快速使用函数指针