0

NSString * CalculationFormula = @ "((Col(202)/ Col(201)-1)* 100"という形式の文字列があります。Col (number)のすべての出現箇所をABC(number * 10)に置き換える必要があります。

助けてください ...

ありがとう、ベン

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 に答える