我有一个字符串..
NSString* string = @"%B999999^PDVS123456789012^PADILLA L. ^0X0000399 ?*;999999554749123456789012=00X990300000?*
我想要的是获取名称PADILLA L.
和999999554749123456789012=00X990300000?*
答案 0 :(得分: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];
答案 1 :(得分: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 Class Reference
答案 2 :(得分: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:®exError];
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]+\.).+\?\*\;(.+)\?\*$