NSString * CalculationFormula = @ "((Col(202)/ Col(201)-1)* 100"という形式の文字列があります。Col (number)のすべての出現箇所をABC(number * 10)に置き換える必要があります。
助けてください ...
ありがとう、ベン
NSString * CalculationFormula = @ "((Col(202)/ Col(201)-1)* 100"という形式の文字列があります。Col (number)のすべての出現箇所をABC(number * 10)に置き換える必要があります。
助けてください ...
ありがとう、ベン
望ましい結果にはあいまいさがあります。たとえば、結果は「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)"