使用正则expression式来查找/replaceNSString中的子string

我想使用正则expression式来查找正则expression式模式的每个实例Ie &*; 在我的string中,并从中删除,返回值是没有任何匹配的原始string。 也希望使用相同的函数来匹配单词之间的多个空格,而只有一个空格。 找不到这样的function。

示例inputstring

 NSString *str = @"123 &1245; Ross Test 12"; 

返回值应该是

 123 Ross Test 12 

如果任何匹配这个模式的东西"&*或者多个空格并且用@"";replace它@"";

 NSString *string = @"123 &1245; Ross Test 12"; NSError *error = nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"&[^;]*;" options:NSRegularExpressionCaseInsensitive error:&error]; NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""]; NSLog(@"%@", modifiedString); 

string在string扩展中使用正则expression式replace代码

Objective-C的

 @implementation NSString(RegularExpression) - (NSString *)replacingWithPattern:(NSString *)pattern withTemplate:(NSString *)withTemplate error:(NSError **)error { NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:NSRegularExpressionCaseInsensitive error:error]; return [regex stringByReplacingMatchesInString:self options:0 range:NSMakeRange(0, self.length) withTemplate:withTemplate]; } @end 

解决

 NSString *string = @"123 &1245; Ross Test 12"; // remove all matches string NSString *result = [string replacingWithPattern:@"&[\\d]+?;" withTemplate:@"" error:nil]; // result = "123 Ross Test 12" 

或者更多

 NSString *string = @"123 + 456"; // swap number NSString *result = [string replacingWithPattern:@"([\\d]+)[ \\+]+([\\d]+)" withTemplate:@"$2 + $1" error:nil]; // result = 456 + 123 

Swift2

 extension String { func replacing(pattern: String, withTemplate: String) throws -> String { let regex = try NSRegularExpression(pattern: pattern, options: .CaseInsensitive) return regex.stringByReplacingMatchesInString(self, options: [], range: NSRange(0..<self.utf16.count), withTemplate: withTemplate) } } 

Swift3

 extension String { func replacing(pattern: String, withTemplate: String) throws -> String { let regex = try RegularExpression(pattern: pattern, options: .caseInsensitive) return regex.stringByReplacingMatches(in: self, options: [], range: NSRange(0..<self.utf16.count), withTemplate: withTemplate) } } 

使用

 var string = "1!I 2\"want 3#to 4$remove 5%all 6&digit and a char right after 7'from 8(string" do { let result = try string.replacing("[\\d]+.", withTemplate: "") } catch { // error } // result = "I want to remove all digit and a char right after from string"