0

次に例を示します。

<aNodeName thsisjijdsnjdnjsd>、削除したいのですがthsisjijdsnjdnjsd

>space の前後にある文字列を検出し、目的の C で削除するにはどうすればよいですか? また、データが次のようになる可能性があるため、aNodeNameまたはがわからないことを思い出してください。thsisjijdsnjdnjsd

<anotherNodeName zxzxxzxzxz>、そして私は削除する必要がありzxzxxzxzxzます。

4

1 に答える 1

1

基本的に2つのオプションがあります

  • 正規表現

    NSString *string = @"<aNodee thsisjijdsnjdnjsd>";
    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<(\\S+)( .*)>" options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
    [matches enumerateObjectsUsingBlock:^(NSTextCheckingResult *result, NSUInteger idx, BOOL *stop) {
        NSString* nodeName = [string substringWithRange:[result rangeAtIndex:1]];
        NSString* value = [string substringWithRange:[result rangeAtIndex:2]];
        NSLog(@"%@ %@",nodeName, value);
    }];
    

    正規表現を使用して複雑な html を解析しないでください。

  • NSスキャナー

    NSScanner *scanner = [NSScanner scannerWithString:string];
    BOOL recordingValue = NO;
    
    NSMutableString *valueString = [@"" mutableCopy];
    [scanner setScanLocation:0];
    while (![scanner isAtEnd]) {
    
        NSString *charAtlocation = [string substringWithRange:NSMakeRange([scanner scanLocation], 1)];
        if ([charAtlocation isEqualToString:@" "]){
            recordingValue = YES;
            [valueString appendString:@" "];
        } else{
            if ([charAtlocation isEqualToString:@">"]){
                recordingValue = NO;
            } else if (recordingValue) {
                [valueString appendString:charAtlocation];
            }
        }
        [scanner setScanLocation:[scanner scanLocation]+1];
    } ;
    
    
    NSLog(@"Scanner approach: %@", valueString);
    NSLog(@"Scanner approach: %@", [string stringByReplacingOccurrencesOfString:valueString withString:@""]);
    

完全なコマンド ライン ベースの例

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *string = @"<aNodee thsisjijdsnjdnjsd> ";
        NSError *error;
        NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<([a-zA-z]+)( .*)>" options:NSRegularExpressionCaseInsensitive
                                                                                 error:&error];
        NSArray *matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [string length])];
        [matches enumerateObjectsUsingBlock:^(NSTextCheckingResult *result, NSUInteger idx, BOOL *stop) {
            NSString* nodeName = [string substringWithRange:[result rangeAtIndex:1]];
            NSString* value = [string substringWithRange:[result rangeAtIndex:2]];
            NSLog(@"Regex approach: %@ %@",nodeName, value);

            NSLog(@"Regex approach: %@", [string stringByReplacingOccurrencesOfString:value withString:@""]);
        }];




        NSScanner *scanner = [NSScanner scannerWithString:string];
        BOOL recordingValue = NO;

        NSMutableString *valueString = [@"" mutableCopy];
        [scanner setScanLocation:0];
        while (![scanner isAtEnd]) {

            NSString *charAtlocation = [string substringWithRange:NSMakeRange([scanner scanLocation], 1)];
            if ([charAtlocation isEqualToString:@" "]){
                recordingValue = YES;
                [valueString appendString:@" "];
            } else{
                if ([charAtlocation isEqualToString:@">"]){
                    recordingValue = NO;
                } else if (recordingValue) {
                    [valueString appendString:charAtlocation];
                }
            }
            [scanner setScanLocation:[scanner scanLocation]+1];
        } ;


        NSLog(@"Scanner approach: %@", valueString);
        NSLog(@"Scanner approach: %@", [string stringByReplacingOccurrencesOfString:valueString withString:@""]);
    }
    return 0;
}

出力:

Regex approach: aNodee  thsisjijdsnjdnjsd
Regex approach: <aNodee> 
Scanner approach:  thsisjijdsnjdnjsd
Scanner approach: <aNodee>
于 2012-10-18T02:29:39.703 に答える