0
我有一個字符串(本例中爲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,我有以下的銀行代碼:
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
這個問題來獲得第四整數這也是</a\><br>
和</span>
所以之間時結果匹配將再次成爲第一個數字。
我可以手動計數字符(這本身就不是一個完美的科學,因爲在每一個整數數字可能不同),做喜歡的事,醜陋:
let newRawHTML = content![content!.startIndex.advancedBy(15)...content!.startIndex.advancedBy(5)]
另一種可能性是刪除任何東西從已經匹配字符串,使其對每個後續搜索都更短(我不知道如何實現)。要做到這一點,有什麼辦法?斯威夫特有什麼方法可以「拔出」比賽嗎?
我讀了一堆關於NSRegularExpression的問題/答案和文章,但我不明白如何使用它。這很好,謝謝! – Shades
我在哪裏可以找到我的正則表達式中使用的Swift通配符字符列表? – Shades
@Shades,請參閱[官方參考]的**正則表達式元字符**和**正則表達式運算符**部分(https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSRegularExpression_Class /index.html#//apple_ref/doc/uid/TP40009708)。 – OOPer