ich einen regulären Ausdruck in einem Parser verwenden, jedoch scheint es, ein Ergebnis zu viel zu geben, das ist mein Code: Regex:NSRegularExpression enumerateMatchesInString: Optionen: Bereich: usingBlock: Geben Sie ein Null-Ergebnis?
self.seatSelectRegex = [NSRegularExpression regularExpressionWithPattern:@"Seat ([0-9]{1,2}): (.*) \\([$£€]?([0-9.]+) in chips\\).*$" options:NSRegularExpressionAnchorsMatchLines error:&error];
Code:
NSMutableDictionary *players = [[NSMutableDictionary alloc] init];
[self.seatSelectRegex enumerateMatchesInString:input options:NSMatchingCompleted range:NSMakeRange(0, input.length) usingBlock:
^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{
NSLog(@"%lu", result.range.length);
Player *p = [[Player alloc] init];
p.name = [input substringWithRange:[result rangeAtIndex:2]];
p.seatNumber = [input substringWithRange:[result rangeAtIndex:1]].intValue;
p.stack = [input substringWithRange:[result rangeAtIndex:3]].doubleValue;
[players setValue:p forKey:p.name];
}];
I‘ Ich erwarte 3 Ergebnisse mit meiner Eingabe, aber ich bekomme 4, wobei das letzte Ergebnis einen Bereich mit Position = 0 und Länge = 0 hat (die ersten drei sind alle korrekt). Ist das übliche Verhalten und sollte ich nur den Ort und die Länge des Bereichs überprüfen, oder gibt es irgendwo einen Fehler?
Für was es wert ist, das ist mein Eingang:
PokerStars Hand #81669312371: Hold'em No Limit ($0.01/$0.02 USD) - 2012/06/08 16:57:33 CET [2012/06/08 10:57:33 ET]
Table 'Icarus III' 6-max Seat #2 is the button
Seat 2: SanderDecler ($2 in chips)
Seat 3: ehrli87 ($0.90 in chips)
Seat 4: umar.11 ($1.60 in chips)
ehrli87: posts small blind $0.01
umar.11: posts big blind $0.02
*** HOLE CARDS ***
Dealt to SanderDecler [Kh 7d]
SanderDecler: raises $0.04 to $0.06
ehrli87: folds
umar.11: calls $0.04
*** FLOP *** [Jc Tc Jh]
umar.11: checks
SanderDecler: bets $0.08
umar.11: raises $0.24 to $0.32
SanderDecler: folds
Uncalled bet ($0.24) returned to umar.11
umar.11 collected $0.28 from pot
*** SUMMARY ***
Total pot $0.29 | Rake $0.01
Board [Jc Tc Jh]
Seat 2: SanderDecler (button) folded on the Flop
Seat 3: ehrli87 (small blind) folded before Flop
Seat 4: umar.11 (big blind) collected ($0.28)
FWIW, Ihre Regex scheint korrekt zu funktionieren (ich bekomme 3 Übereinstimmungen in RegexBuddy, wie erwartet). –
Ye, ich hatte das gleiche Problem mit einigen anderen Regex zu, aber da ich nur 1 Ergebnis dann brauchte, habe ich nur die ersteMatchInString: Optionen: Bereich: Funktion ... –