2

我有一个字符串..

NSString* string = @"%B999999^PDVS123456789012^PADILLA L.                    ^0X0000399           ?*;999999554749123456789012=00X990300000?*

我想要的是得到名字PADILLA L.999999554749123456789012=00X990300000?*

4

3 回答 3

4

用于NSString componentsSeparatedByString:拆分字符串。第一次使用@"^"。该名称将位于索引 2。然后使用 . 拆分索引 3 处的子字符串@";"。索引 1 处的字符串将为您提供所需的第二部分。

NSArray *substrings = [string componentsSeparatedByString:@"^"];
NSString *name = substrings[2];
name = [name stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSString *lastpart = substrings[3];
NSArray *moresubstrings = [lastpart componentsSeparatedByString:@";"];
NSString *secondPiece = moresubstrings[1];
于 2012-11-23T01:29:51.893 回答
0

没有更多细节,这里是一种蛮力方式:

NSString* string = @"%B999999^PDVS123456789012^PADILLA L.                    ^0X0000399           ?*;999999554749123456789012=00X990300000?*";
NSRange nameRange = {26, 10};
NSString *name = [string substringWithRange:nameRange];
NSRange numRange = {80, 39};
NSString *num = [string substringWithRange:numRange];

文档是你的朋友:NSString 类参考

于 2012-11-23T01:41:10.020 回答
0

在不知道确切的输入模式是什么的情况下(我们只有您的 n-of-1 示例),很难准确地说出您如何正确解析它;但NSRegularExpression提供您需要的东西(除了其他建议的方法):

#import <Foundation/Foundation.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        NSString *sampleText = @"%B999999^PDVS123456789012^PADILLA L.                    ^0X0000399           ?*;999999554749123456789012=00X990300000?*";
        NSError *regexError = nil;
        NSRegularExpressionOptions options = 0;
        NSString *pattern = @"^%\\w+\\^\\w+\\^([A-Za-z\\s]+\\.).+\\?\\*\\;(.+)\\?\\*$";
        NSRegularExpression *expression = [NSRegularExpression regularExpressionWithPattern:pattern options:options error:&regexError];

        NSTextCheckingResult *match = [expression firstMatchInString:sampleText options:0 range:range];
        if( match ) {
            NSRange nameRange = [match rangeAtIndex:1];
            NSRange numberRange = [match rangeAtIndex:2];

            printf("name = %s ",[[sampleText substringWithRange:nameRange] UTF8String]);
            printf("number = %s\n",[[sampleText substringWithRange:numberRange] UTF8String]);
        }
    }
}

这个小型 Foundation 应用程序将以下内容打印到控制台:

name = PADILLA L. number = 999999554749123456789012=00X990300000

用于分析输入字符串的正则表达式可能需要根据输入字符串的变化方式进行调整。现在它是(未转义的):

^%\w+\^\w+\^([A-Za-z\s]+\.).+\?\*\;(.+)\?\*$
于 2012-11-23T02:13:49.800 回答