2012-08-08 66 views
1

我需要 前正则表达式式“17%的折扣等等等等” 或“2%的折扣等等等等等等” 因此,如果该字符串与一开始启动或2其次是百分号,空间,和单词“关”目标C的正则表达式被1或2个数字

位数我试图

NSPredicate* test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^[0-9]{1,2}% off"]; 
if ([test evaluateWithObject:candidate]) 
{ 
.... etc.. 

,但没有运气。

我明白任何见解。

+1

我没有问题,可以选择“23%off”或“7%off”。你的候选人的形状是否合适? – Matthias 2012-08-08 13:41:14

+0

是的..我确信他们以数字开头。 – Zsolt 2012-08-08 13:42:29

回答

1

使用这个命令行示例应用程序它工作得很好。

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 

     NSArray *lines = @[ @"17% off etc.", @"2% off", @"off by 12%" ]; 
     NSPredicate* test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^[0-9]{1,2}% off.*"]; 

     [lines enumerateObjectsUsingBlock:^(NSString *candidate, NSUInteger idx, BOOL *stop) { 
      if ([test evaluateWithObject:candidate]){ 
       NSLog(@":)"); 
      } else{ 
       NSLog(@":("); 
      } 
     }]; 


    } 
    return 0; 
} 

输出:

2012-08-08 15:46:16.213 regextest[1305:303] :) 
2012-08-08 15:46:16.215 regextest[1305:303] :) 
2012-08-08 15:46:16.215 regextest[1305:303] :(

如果行包含多个字符,它应该看起来像

NSPredicate* test = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"^[0-9]{1,2}% off.*"]; 

.*表明,任何数量的任何字符的可能存在。

+0

哦,是的..我忘了结束它。非常感谢vikingosegundo!作品 – Zsolt 2012-08-08 13:57:11

+0

«有些人在遇到问题时,认为 “我知道,我会用正则表达式。”现在他们有两个问题。»RegEx是个婊子... – vikingosegundo 2012-08-08 14:04:48

相关问题