我有一个像下面这样的字符串。

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


我想删除Some标签中保留修整功能的br标签,例如在SomeHtmlString中保留中间的br标签。
短期内有什么功能吗?

例如

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




test1<br><br>test2

最佳答案

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

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:@""];


这样可以避免循环,但是很难修改。

关于objective-c - 某些关键字的字符串修剪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13802972/

10-14 20:13