2012-03-12 12 views
55

Me gustaría usar expresiones regulares para encontrar todas las instancias de un patrón de expresión regular, es decir. &*; en mi cadena y quítelo para que el valor de retorno sea la cadena original sin ninguna de las coincidencias. También me gustaría utilizar la misma función para unir espacios múltiples entre palabras y tener un espacio único en su lugar. No pude encontrar tal función.Usar expresión regular para buscar/reemplazar subcadena en NSString

Muestra cadena de entrada

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

Valor de retorno debe ser

123 Ross Test 12 

Si nada que coincida con este patrón "&* o varios espacios en blanco y lo reemplaza con código @"";

Respuesta

150
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); 
+6

En ObjC se debe utilizar nula en lugar de NULL. Pero NULL también funciona, ya que es C. – Daniel

6

cadena sustitución usando expresiones regulares en la extensión de cadena

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 

determinación

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

o más

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) 
    } 
} 

uso

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" 
Cuestiones relacionadas