2012-08-08 79 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

相關問題