用通配符/正则表达式替换NSString - cocoa

时间:2009-10-27 20:02:45

标签: objective-c cocoa nsstring

NSString *x=@"\"/Sagar\' and \'Samir\' ";

现在,我想删除它们之间的字符。

\“/

\'

预期输出

x = (should have) @"and \'Samir\'"

所以,Ms word在find& amp;中提供了一些选项。替换,使用通配符。 (仅举例)

可可吗?

4 个答案:

答案 0 :(得分:4)

我假设你正在寻找一般的解决方案 - 而不是这个特定的字符串。您需要了解regular expressions

对于Objective-C中的正则表达式支持,请查看RegexKitLite。它在NSString上提供了支持各种正则表达式匹配和替换的类别方法。

答案 1 :(得分:3)

你也可以很容易地使用NSScanner。快速阅读本文将为您提供所需的一切:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/Scanners.html#//apple_ref/doc/uid/20000147-BCIEFGHC

答案 2 :(得分:2)

你可以使用直接C的东西。这是一个regex library,允许您使用NSString。这个site有一个小例子。

答案 3 :(得分:0)

前面的所有答案都指向正则表达式的一般概念,因此我认为更为具体。

当然,在C,Obj-C和Cocoa Framework级别都有很多选择,但是我将介绍两个。

可以在#import <Foundation/NSScriptWhoseTest.h>中定义的NSObject类别中找到与NSString最简单的通配符匹配,该类别提供了许多高级比较。其中有两个:

@interface NSObject (NSComparisonMethods)
  // argument should be a string using simple shell wildcards (* and ?). (e.g. "Stev*" or "N?XT"). Returns NO if receiver is not an NSString.
- (BOOL)isLike:(NSString *)object;
- (BOOL)isCaseInsensitiveLike:(NSString *)object;
@end

所以

if ([@"\"/Sagar\' and \'Samir\' " isLike:@"\"/*\' and \'Samir\' "]) {
    NSLog (@"Match!");
}

将记录“匹配!”

如果您要使用最强大的工具,请直接使用NSRegularExpression或通过NSString内部的支持使用NSRegularExpression。使用NSString,您可以执行以下操作:

    NSMutableString *x= [[NSMutableString alloc] initWithString:@"\"/Sagar\' and \'Samir\' "];
NSLog (@"String: %@", x);
NSString *regex = @"\\\"[/a-zA-z]+\\\'";
NSString *replacement = @"";
NSLog (@"RegEx: %@ Replacement:%@", regex, replacement);

NSLog (@"RegEx: %@ Replacement:%@", regex, replacement);
NSRange allJson = NSMakeRange(0, json.length);

// Using NSString support for regular expressions
NSUInteger hits = [json replaceOccurrencesOfString:regex withString:replacement options:NSRegularExpressionSearch range:allJson];

// Using NSRegularExpression directly
NSError *error = nil;
NSRegularExpression *exp = [NSRegularExpression regularExpressionWithPattern:regex options:0  error:&error];
NSUInteger hits = [exp replaceMatchesInString:json options:0 range:allJson withTemplate:replacement];

NSLog (@"%lu hits in: %@", hits, x);

,您的输出将如下所示:

2020-12-01 13:04:49.8908 Test[420:799] String: "/Sagar' and 'Samir'
2020-12-01 13:04:51.3608 Test[420:799] RegEx: \"[/a-zA-z]+\' Replacement:
2020-12-01 13:04:53.0415 Test[42570:724799] 1 hits in:  and 'Samir'