字符串修剪与某些关键字

时间:2012-12-10 14:32:28

标签: objective-c ios nsstring trim

我有一个如下字符串。

<br><br><br><br><br>  SomeHtmlString  <br><br><br><br><br>

我想删除一些br标签,比如在SomeHtmlString中保留中间br标签的trim功能。 有没有什么功能可以做到这一点?

e.g。

<br><br><br>test1<br><br>test2<br><br><br><br>

test1<br><br>test2

4 个答案:

答案 0 :(得分:2)

这是一个使用正则表达式的方法。它一次只匹配一个,并在字符串结尾处替换它。

NSMutableString *replaceMe = [[NSMutableString alloc ]
             initWithString:@"<br><br > <br >  test<br>test2<br><br>"];
NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression 
           regularExpressionWithPattern:@"^ *<br *> *"
           options:NSRegularExpressionCaseInsensitive
           error:&error];
do {
    ;
} while ([regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""] != 0);

regex = [NSRegularExpression 
           regularExpressionWithPattern:@" *<br *> *$"
           options:NSRegularExpressionCaseInsensitive
           error:&error];
do {
    ;
} while ([regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""] != 0);

NSLog(@"string=%@", replaceMe);

这会将"<br><br > <br > test<br>test2<br><br>"删除到test<br>test2。 它可能不是最好的解决方案,但它很容易修改以匹配不同的表达式,例如不同的空格。

也可以使用正则表达式一次匹配多个<br>

NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@"^ *(<br *> *)+"
    options:NSRegularExpressionCaseInsensitive
    error:&error];
[regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""];
NSRegularExpression *regex = [NSRegularExpression 
    regularExpressionWithPattern:@" *(<br *> *)+$"
    options:NSRegularExpressionCaseInsensitive
    error:&error];
[regex replaceMatchesInString:replaceMe options:NSMatchingCompleted range:NSMakeRange(0, replaceMe.length) withTemplate:@""];

这可以避免循环,但有点难以修改。

答案 1 :(得分:0)

你可以这样做:

NSString* htmlString= @"<br><br><br><br><br>  SomeHtmlString  <br><br><br><br><br>";
NSString* pureString= [htmlString stringByReplacingOccurrencesOfString: @"<br>" withString: @""];

所以你在pureString中会有@“SomeHtmlString”。

答案 2 :(得分:0)

您可以使用它来删除不需要的位:

[yourString stringByReplacingOccurrencesOfString:@"<br>" withString:@""];

然后你会用这样的东西以你想要的方式重新制作你的字符串:

NSString *newString = [NSString stringWithFormat:@"<br>%@<br>", yourString];

您可能还想查看stringByTrimmingCharactersInSet:

你可以用NSString做很多事情。查看课程参考:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

编辑:

substringToIndex:可能是你的朋友。您可以执行此操作以查明字符串的前4个字符是否包含要删除的字符:

NSString *subString = [yourString substringToIndex:4];
if ([subString isEqualToString:@"<br>"]) {
    yourString = [yourString substringFromIndex:4];
}

然后你创建一个没有这4个字符的新字符串。你继续这样做,直到前4个字符不等于你要删除的字符。

您可以使用substringFromIndex在字符串末尾执行类似操作。您需要知道原始字符串的长度,以确保没有任何子字符串超出范围。

答案 3 :(得分:0)

替代正则表达式再现:

NSString *input = @"<br><br><br><br><br><br>test<br>test2<br><br><br><br><br><br><br><br><br><br>";
__block NSString *output;

NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^(<br>)*(.*?)(<br>)*$"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:&error];

[regex enumerateMatchesInString:input
                        options:0
                          range:NSMakeRange(0, [input length])
                     usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {

                         NSRange matchRange = [result rangeAtIndex:2];

                         output = [input substringWithRange:matchRange];
                     }];

if (output)
    NSLog(@"Found: %@", output);