0

我有一个格式为 NSString *CalculationFormula = @"((Col(202)/Col(201)-1)*100"; 的字符串;我需要用ABC(number * 10)替换所有出现的Col(number )

请帮忙 ...

谢谢,本

4

1 回答 1

1

期望的结果有些模棱两可。例如,结果应该是“ABC(202 * 10)”还是“ABC(2020)”?我将假设后者。由于正则表达式相当通用,这里有一个 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

现在,如果我最初的假设是错误的,并且您确实想要结果中的“num * 10”,那么替换模式是:

@"ABC($1 * 10)"
于 2012-09-18T17:33:10.257 回答