更新 0
我在下面添加了代码for (... match in)
。
更新 0
我的源文本大约每 40 行重复一次。下面我为下面的 2 次重复显示 8 行。完整的数据集在这里。我需要“[Board]”行中引号之间的一位或两位数;从“[经销商]”行我需要引号之间的单个字母。
[Board "1"]
[Dealer "N"]
[Vulnerable "None"]
[Deal "N:Q952.652.KJT4.95 T.KQT84.A865.J73 K8763.A7.Q.KQT84 AJ4.J93.9732.A62"]
[Scoring ""]
[Declarer ""]
[Contract ""]
[Board "2"]
[Dealer "E"]
[Vulnerable "NS"]
[Deal "E:K8542.3.4.AT7532 J76.K7.AT85.KQJ8 QT3.AJ84.KJ963.4 A9.QT9652.Q72.96"]
[Scoring ""]
[Declarer ""]
[Contract ""]
以下正则表达式有效,但只选择一个匹配项,而不是我文本中的 30 多个匹配项。
NSString *toMatch = @"\\[Board \"([0-9][0-9]?)\"\\].*\\[Dealer \"([NEWS])\"\\]";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:toMatch options:NSRegularExpressionDotMatchesLineSeparators error:&error];
for (NSTextCheckingResult* match in [regex matchesInString:string options:NSRegularExpressionDotMatchesLineSeparators range:NSMakeRange(0, [string length])])
{
NSLog(@"Number of ranges in match: %u", match.numberOfRanges);
for (NSUInteger i = 0; i < match.numberOfRanges; ++i)
{
NSRange matchedRange = [match rangeAtIndex: i];
NSString* tstring = [string substringWithRange: matchedRange];
NSLog(@"range %lu string: %@", (unsigned long)i, tstring);
}
}
我怀疑问题出在换行符中,但我不知道如何解决它和 options 。这是这个问题的延续。
如何修复正则表达式模式以获取多个匹配项?
(此外,我需要在“[Deal]”行中添加以下内容,但我们暂时忽略它。我需要四个单独的组,第一个在“:”之后和空格之前,第二个和第三个在空格之间,最后一个是最后一个空格之后和引号之前的所有内容。)