我正在尝试从一些源代码中提取信息。
查看源代码: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/