我有一个如下字符串。
<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
答案 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);