以下是Java的语法:Code.split("(?<=\\D)(?=\\d)");
我想在ios目标c中进行转换
字符串代码:LR00001或BLNS-9-M
我希望O / p为:
如果代码是LR00001,那么Array给我两个值。在第0个索引上它给出LR,在第1个索引上它给出我00001
如果代码是BLNS-9-M,则为Array [0] BLNS和Array [1] 9-M
此o / p在Java中工作,但在ios目标c中需要。
此正则表达式:(?<=\\D)(?=\\d)
表示它在字符串中找到位置,该位置之前是一个非数字(\D
)字符,之后是一个数字(\d
)。
即匹配非数字(\D
)和数字(\d
)之间的位置。
以下我尝试过的代码:
1。
NSArray *arrComponents = [strCode componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"(?<=\\D)(?=\\d)"]];
2。
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=\\D)(?=\\d)" options:0 error:&error];
NSArray* matches = [regex matchesInString:strCode options:0 range:NSMakeRange(0, [strStyleCode length])];
NSTextCheckingResult *match = [regex firstMatchInString:strCode options:0 range: NSMakeRange(0, [strStyleCode length])];
NSLog(@"group1: %@", [strCode substringWithRange:[match rangeAtIndex:0]]);
NSLog(@"group2: %@", [strCode substringWithRange:[match rangeAtIndex:1]]);
3。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"(?<=\\D)(?=\\d)"];
以上所有方法均无效。
我想要ios目标c中的相同输出。
[LR,00001] [BLNS,9-M]
答案 0 :(得分:2)
您可以先将所有匹配项替换为一个未使用的符号,例如,将其替换为\x00
空字符,然后将其拆分:
NSError *error = nil;
NSString *str = @"LR00001";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=\\D)(?=\\d)" options:nil error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:str options:0 range:NSMakeRange(0, [str length]) withTemplate:@"\x00"];
NSArray *chunks = [modifiedString componentsSeparatedByString: @"\x00"];
for(NSString *c in chunks) {
NSLog(@"%@", c);
}
它打印LR
和00001
。
请参见online demo。
答案 1 :(得分:1)
Java的String.split
使用正则表达式来匹配分隔符(可能为零长度),应在该分隔符处拆分字符串。然后,它提取匹配前后的字符串部分,不提取与RE匹配的任何内容。
Objective-C具有用于分隔字符串componentsSeparatedBy...
的方法,但是这些方法都不带正则表达式。您的第一次尝试是通过使用正则表达式定义一个字符集来尝试使用其中之一。但是,即使您可以将特定定界符中的字符集设为空,也无法以这种方式定义字符集。
您的第三次尝试未完成,因此我们将跳过它。
现在,您第二次尝试使用firstMatchInString:
来定位定界符,但是发现它并没有尝试提取该定界符前后的字符串,即您没有执行实际的分割。如果这样做,您将获得与Java拆分相当的Objective-C。
概述:
firstMatchInString:
查找字符串中的第一个定界符firstMatchInString:
结果的一部分是NSRange
,其中包含起始索引,而NSString
具有提取子字符串的方法基于索引。您可以在Objective-C中将以上代码编写为简单的while
循环。
如果在尝试实现此算法时遇到麻烦,请提出一个新问题,显示您的代码,说明您的问题,包括指向该问题的链接,无疑会有人帮助您。
HTH