8

所以我有一个NSString基本上是一个html包含所有常用html元素的字符串。我想做的具体事情就是从所有img标签中删除它。 标签可能有img也可能没有最大宽度、样式或其他属性,所以我不知道它们的长度。他们总是以/>

我怎么能这样做?

编辑:根据nicolasthenoz的回答,我想出了一个需要更少代码的解决方案:

NSString *HTMLTagss = @"<img[^>]*>"; //regex to remove img tag
NSString *stringWithoutImage = [htmlString stringByReplacingOccurrencesOfRegex:HTMLTagss withString:@""]; 
4

3 回答 3

14

您可以使用带有以下选项的NSString方法:stringByReplacingOccurrencesOfStringNSRegularExpressionSearch

NSString *result = [html stringByReplacingOccurrencesOfString:@"<img[^>]*>" withString:@"" options:NSCaseInsensitiveSearch | NSRegularExpressionSearch range:NSMakeRange(0, [html length])];

或者你也可以使用 的replaceMatchesInString方法NSRegularExpression。因此,假设您的 html 在 a 中NSMutableString *html,您可以:

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img[^>]*>"
                                                                       options:NSRegularExpressionCaseInsensitive
                                                                         error:nil];

[regex replaceMatchesInString:html
                      options:0
                        range:NSMakeRange(0, html.length)
                 withTemplate:@""];

我个人倾向于这些选项之一而stringByReplacingOccurrencesOfRegex不是RegexKitLite. 除非有其他令人信服的问题,否则没有必要为如此​​简单的事情引入第三方库。

于 2012-09-19T15:02:45.663 回答
4

使用正则表达式,在字符串中找到匹配项并将其删除!这是如何

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<img[^>]*>"
                                                                       options:NSRegularExpressionCaseInsensitive 
                                                                         error:nil];

NSMutableString* mutableString = [yourStringToStripFrom mutableCopy];
NSInteger offset = 0; // keeps track of range changes in the string due to replacements.
for (NSTextCheckingResult* result in [regex matchesInString:yourStringToStripFrom 
                                                    options:0 
                                                      range:NSMakeRange(0, [yourStringToStripFrom length])]) {

    NSRange resultRange = [result range];   
    resultRange.location += offset; 

    NSString* match = [regex replacementStringForResult:result 
                                               inString:mutableString 
                                                 offset:offset 
                                               template:@"$0"];

    // make the replacement
    [mutableString replaceCharactersInRange:resultRange withString:@""];

    // update the offset based on the replacement
    offset += ([match length] - resultRange.length);
}
于 2012-09-19T14:34:57.540 回答
0

您可以在 Swift 4,5 中使用以下函数:

func filterImgTag(text: String) -> String{
    return text.replacingOccurrences(of: "<img[^>]*>", with: "", options: String.CompareOptions.regularExpression)
}

希望对大家有帮助!如果它适合你,请在下面评论。谢谢。

于 2020-04-29T10:24:48.203 回答