gpt4 book ai didi

swift - 从正则表达式模式匹配返回结果

转载 作者:行者123 更新时间:2023-11-28 12:42:28 24 4
gpt4 key购买 nike

我有一个字符串(在本示例中为 HTML),其中包含用于显示体育比赛结果的相同模式。因此,HTML 标签是已知的,但每个游戏的值是未知的。

In Perl, we can do this:

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;
}

which returns the digits inside the parentheses, in this case 6 total integers of varying digit lengths. We can then assign those matches to variables.


来自这个问题的答案: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 中有什么方法可以“拔出”火柴吗?

最佳答案

您作为 Perl 示例显示的代码使用了正则表达式。如果模式变得有点复杂,您最好直接使用 NSRegularExpression

let pattern = "</a><br>(\\d+)</span><br>(\\d+)-(\\d+).+</a><br>(\\d+)</span><br>(\\d+)-(\\d+)"
let regex = try! NSRegularExpression(pattern: pattern, options: [])
if let match = regex.firstMatchInString(content, options: [], range: NSRange(0..<content.utf16.count)) {
let visitingTeamScore = (content as NSString).substringWithRange(match.rangeAtIndex(1))
let visitingTeamWins = (content as NSString).substringWithRange(match.rangeAtIndex(2))
let visitingTeamLosses = (content as NSString).substringWithRange(match.rangeAtIndex(3))
let homeTeamScore = (content as NSString).substringWithRange(match.rangeAtIndex(4))
let homeTeamWins = (content as NSString).substringWithRange(match.rangeAtIndex(5))
let homeTeamLosses = (content as NSString).substringWithRange(match.rangeAtIndex(6))
//...use the values
}

关于swift - 从正则表达式模式匹配返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39110726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com