使用正则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"