web-dev-qa-db-fra.com

Utilisez une expression régulière pour rechercher / remplacer la sous-chaîne dans NSString

Je voudrais utiliser l'expression régulière pour trouver toutes les instances d'un modèle d'expression régulière, c'est-à-dire &*; dans ma chaîne et supprimez-la de sorte que la valeur de retour soit la chaîne d'origine sans aucune correspondance. J'aimerais également utiliser la même fonction pour faire correspondre plusieurs espaces entre les mots et avoir un seul espace à la place. Impossible de trouver une telle fonction.

Exemple de chaîne d'entrée

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

La valeur de retour doit être

123 Ross Test 12

Si quelque chose correspond à ce modèle "&* ou plusieurs espaces blancs et le remplace par @"";

60
Faz Ya
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);
157
neevek

Chaîne remplaçant le code à l'aide d'une expression régulière dans l'extension String

Objectif-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

résoudre

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

ou plus

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

Swift

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

utilisation

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"
12
larva