如何在NSString的模式之间替换字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在NSString的模式之间替换字符串?相关的知识,希望对你有一定的参考价值。

考虑以下模式的NSString:

(foo('Class 0')bar('Class 1')baz('Class 2')

我只需要返回foobarbaz。我有什么方法可以至少用正则表达式将'Class 0'替换为单个字符?

我试过了:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\(.*?\)"
                                                                         options:NSRegularExpressionCaseInsensitive
                                                                           error:nil];
text = [regex stringByReplacingMatchesInString:text options:0 range:NSMakeRange(0, [text length]) withTemplate:@""];
答案

如果我理解你的情况,你需要从上面的字符串中解析foobarbaz。下面的代码就是这样做的,并在数组中返回foobarbaz

正如您将在代码中看到的那样,我们匹配一个单词和一个开头的paren,然后以编程方式修剪parens。可能有一个更好的正则表达式,不需要修剪,但我无法使用NSRegularExpression。

NSString *text = @"(foo('Class 0')bar('Class 1')baz('Class 2')";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[a-z]+[(]"
                                          options:NSRegularExpressionCaseInsensitive
                                            error:nil];

NSMutableArray *output = [[NSMutableArray alloc] init];
[regex enumerateMatchesInString:text
                        options:0
                          range:NSMakeRange(0, [text length])
                     usingBlock:^(NSTextCheckingResult * _Nullable result, NSMatchingFlags flags, BOOL * _Nonnull stop) {

                         NSString *rawMatch = [text substringWithRange:result.range];
                         NSString *trimmed = [rawMatch substringToIndex:(rawMatch.length - 1)];
                         [output addObject:trimmed];
                     }];

要获得一个字符串,就像您在上面的评论中提到的那样,只需使用

NSString *finalString = [output componentsJoinedByString:@" "];
另一答案

我会用:

NSString *string = @"foo('Class 0')bar('Class 1')baz('Class 2')";
NSString *output = [string stringByReplacingOccurrencesOfString:@"\('[^')]*'\)"
                                                     withString:@" "
                                                        options:NSRegularExpressionSearch
                                                          range:NSMakeRange(0, string.length)];
NSLog(@"%@", output); // foo bar baz

用空格替换('')之间的任何东西。模式[^')]意味着我们不希望)'letters出现在它们之间。

以上是关于如何在NSString的模式之间替换字符串?的主要内容,如果未能解决你的问题,请参考以下文章

NSString 中的必需字符替换为编码变量

如何在 Shell 脚本中随后出现的 2 个字符串模式之间替换一个字符串?

修剪字符之间的空格

如何在 UIView 上绘制一个 NSString 数组,它们之间没有任何前导空格并占据整个矩形?

代码笔记iOS-字符串替换回车和换行

仅替换NSString中子字符串的第一个实例