【发布时间】:2016-08-23 21:10:56
【问题描述】:
我有一个字符串(在本例中为 HTML),其中包含用于显示体育比赛结果的相同模式。因此,HTML 标签是已知的,但每个游戏的值却是未知的。
在 Perl 中,我们可以这样做:
if ( $content =~ /\<\/a\>\<br\>(\d+)\<\/span\>\<br\>(\d+)\-(\d+).+\<\/a\>\<br\>(\d+)\<\/span\>\<br\>(\d+)\-(\d+)/) { $visitingTeamScore = $1; // $1 is the 1st matched digit $visitingTeamWins = $2; // $2 is the 2nd matched digit $visitingTeamLosses = $3; // Etc $homeTeamScore = $4; $homeTeamWins = $5; $homeTeamLosses = $6; }返回括号内的数字,在本例中为 6 个不同数字长度的整数。然后我们可以将这些匹配项分配给变量。
从这个问题的答案:Swift Get string between 2 strings in a string,我有以下 Swift 代码:
extension String {
func sliceFrom(start: String, to: String) -> String? {
return (rangeOfString(start)?.endIndex).flatMap { sInd in
(rangeOfString(to, range: sInd..<endIndex)?.startIndex).map { eInd in
substringWithRange(sInd..<eInd)
}
}
}
}
let firstMatch = content?.sliceFrom("</a><br>", to: "</span>") // The first integer in the string
当获得第 4 个整数时出现问题,该整数也在 </a\><br> 和 </span> 之间,因此结果匹配将再次成为第一个数字。
我可以手动计算字符数(这本身并不是一门完美的科学,因为每个整数中的数字可能不同)来做一些丑陋的事情,比如:
let newRawHTML = content![content!.startIndex.advancedBy(15)...content!.startIndex.advancedBy(5)]
另一种可能性是从字符串中删除已经匹配的任何内容,使其每次搜索都更短(我不确定如何实现。)这样做的方法是什么? Swift 中有什么方法可以“拔出”匹配项吗?
【问题讨论】: