-1

ConsumerVisit(201) または Date(CX1) のような文字列があります。括弧 "(" ")" 内の文字列を取得するにはどうすればよいですか?

次のコードで数回試しましたが、substringWithRange..でクラッシュしました。

NSRange match;
    NSRange match1;
    match = [_actType.text rangeOfString: @"("];
    match1 = [_actType.text rangeOfString: @")"];
    NSLog(@"%i,%i",match.location,match1.location);
    NSString *newDes = [_actType.text substringWithRange: NSMakeRange (match.location, match1.location-1)];
4

4 に答える 4

1

十分に冒険したい場合は、実際にこの目的のために作成された正規表現を使用できます。ただし、慣れるには少し時間がかかります。

NSString *text = @"ConsumerVisit(201)";
NSString *substring = nil;

NSRange parenRng = [text rangeOfString: @"(?<=\\().*?(?=\\))" options: NSRegularExpressionSearch];

if ( parenRng.location != NSNotFound ) {
     substring = [text substringWithRange:parenRng];
}

パターンは次のように分類されます。

  1. \\(Cocoa 正規表現のように「綴られている」かっこを検索します
  2. ... ただし、最後の部分文字列には含めないでください -(?<=)括弧で囲まれた構造によって示されます。これは、肯定的な後読みと呼ばれます。
  3. 括弧の後に、任意の文字 (ドット) を 0 回以上 (アスタリスク) 取りますが、正規表現全体 (疑問符) を満たしながら、できるだけ短くします。
  4. すべてが括弧で終わっていることを確認しますが、結果には含めないでください (上記の 1. で説明した左括弧と同様です。これは肯定的な先読みと呼ばれます。
于 2013-04-15T12:53:39.863 に答える
1

以下のコードを試してください..

NSString *newDes = _actType.text;
NSArray *strArray = [newDes componentsSeparatedByString:@"("];
newDes = [strArray objectAtIndex:1];
strArray = [newDes componentsSeparatedByString:@")"];
newDes = [strArray objectAtIndex:0];

newDes の値は201である必要があります。

私は怒鳴るのようなあなたの値で使用します..

NSString *newDes = @"ConsumerVisit(201)";
NSArray *strArray = [newDes componentsSeparatedByString:@"("];
newDes = [strArray objectAtIndex:1];
strArray = [newDes componentsSeparatedByString:@")"];
newDes = [strArray objectAtIndex:0];
NSLog(@"\n\n newDes ==>> %@",newDes);

出て、newDes ==>> 201

于 2013-04-15T12:22:24.453 に答える
0

私はそれを考え出した..

    NSString *originalString = @"ConsumerVisit(201)"
    NSRange start = [originalString rangeOfString:@"("];
    NSRange end = [originalString rangeOfString:@")"];
    NSString *betweenBraces;
    if (start.location != NSNotFound && end.location != NSNotFound && end.location > start.location) {
        betweenBraces = [originalString substringWithRange:NSMakeRange(start.location+1, end.location-(start.location+1))];
    }
    NSLog(@"Sub string: %@", betweenBraces);

出力> サブ文字列: 201

@paras n @vinu の素早い回答に感謝します。

于 2013-04-15T12:54:58.327 に答える