我正在寻找从这个字符串中提取的方法:
"Per 100g - Calories: 274kcal | Fat: 14.08g | Carbs: 35.71g | Protein: 3.49g"
以下内容:
"100g", "247", "14.08", "35.71", "3.49"
这是我尝试的内容:
NSString *patternString = @"Per (.*) - Calories: (\\d*)kcal | Fat: (\\d*.\\d*)g | Carbs: (\\d*.\\d*)g | Protein: (\\d*.\\d*)g";
regex = [NSRegularExpression regularExpressionWithPattern:patternString options:NSRegularExpressionCaseInsensitive error:&error];
NSLog(@"length of overall matches is %d", (int)[matches count]);
parsedString = [stringToParse substringWithRange:[matches[0] rangeAtIndex:1]];
NSLog(@"and here is the parsed string %@", parsedString);
但是我只获得了一场比赛,捕获了第一组,并且只返回100g
而不是其他任何内容。有没有办法一举提取所有这些数字?请注意,Per ___
是一个变量字符串,并且不会总是以一定数量的克数形式出现。
感谢您的任何建议。
答案 0 :(得分:0)
你需要逃避" |"模式中的字符:
NSString *text = @"Per 100g - Calories: 274kcal \\| Fat: 14.08g \\| Carbs: 35.71g \\| Protein: 3.49g";
NSRange searchedRange = NSMakeRange(0, text.length);
NSString *patternString = @"Per (.*) - Calories: (\\d*)kcal \\| Fat: (\\d*.\\d*)g \\| Carbs: (\\d*.\\d*)g";
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:patternString options:NSRegularExpressionCaseInsensitive error:&error];
NSTextCheckingResult* match = [regex firstMatchInString:text options:0 range: searchedRange];
for (int group = 1; group<match.numberOfRanges; group++) {
NSLog(@"match %i: %@", group, [text substringWithRange:[match rangeAtIndex:group]]);
}
输出:
匹配1:100g
比赛2:274
比赛3:14.08
比赛4:35.71