2012-09-18 53 views

回答

1

有没有在预期的效果有些含糊不清。例如,如果结果是“ABC( 202 * 10)“或”ABC(2020)“?我要去assu我后者。由于正则表达式是相当通用的,下面是一个Perl片段,它完成了我认为你想要的东西,然后将它翻译成Cocoa。我已经给出了两个,因为在移动到NSRegularExpression之前,更容易看到发生了什么,因为后者在模式中有更多的转义。

Perl版本:

#!/usr/bin/perl -w 
use strict; 


my $search_text = "((Col(202)/Col(201)-1)*100"; 

$search_text =~ s|Col\((?P<num>\d+)\)|ABC($+{num}0)|g; 
print $search_text; 

打印:((ABC(2020)/ABC(2010)-1)*100

所以,匹配模式是Col\((?P<num>\d+)\)且取代类型ABC($+{num}0

可可版本:

#import <Foundation/Foundation.h> 

int main(int argc, char *argv[]) { 
    NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init]; 

    NSRegularExpression *regex = nil; 
    regex = [NSRegularExpression regularExpressionWithPattern:@"Col\\((\\d+)\\)" options:NSRegularExpressionCaseInsensitive error:nil]; 
    NSString *searchText = @"((Col(202)/Col(201)-1)*100"; 
    NSString *newText = [regex stringByReplacingMatchesInString:searchText options:0 range:NSMakeRange(0,[searchText length]) withTemplate:@"ABC($10)"]; 
    NSLog(@"new = %@",newText); 
    [p release]; 
} 

日志:

2012-09-18 12:30:26.880 Untitled[22405:707] new = ((ABC(2020)/ABC(2010)-1)*100 

现在,如果我原来的设想是错误的,你从字面上想要的“民* 10”的结果,那么替代模式是:

@"ABC($1 * 10)" 
+0

非常感谢艾伦... – Ben861305