Conduzida, essa pergunta tem muito valor, mas como está, é provável que seja fechada porque você não faz uma pergunta clara: é um cenário não reproduzível. Eu sugiro que você reformule sua pergunta de acordo com How to Ask . Eu não gostaria que essa pergunta fosse excluída.
Tunaki,
3
lol stackoverflow ... como isso é fechado como "fora do tópico"? É o resultado nº 1 do Google para "Remoção de tags html Swift".
canhazbits de
2
@canhazbits eu sei né! Clique em reabrir para indicá-lo para reabrir novamente.
Hmm, eu tentei sua função e funcionou em um pequeno exemplo:
var string ="<!DOCTYPE html> <html> <body> <h1>My First Heading</h1> <p>My first paragraph.</p> </body> </html>"let str = string.stringByReplacingOccurrencesOfString("<[^>]+>", withString:"", options:.RegularExpressionSearch, range:nil)
print(str)//output " My First Heading My first paragraph. "
Você pode dar um exemplo de um problema?
Versão Swift 4 e 5:
var string ="<!DOCTYPE html> <html> <body> <h1>My First Heading</h1> <p>My first paragraph.</p> </body> </html>"let str = string.replacingOccurrences(of:"<[^>]+>", with:"", options:.regularExpression, range:nil)
Eu consideraria usar NSAttributedString em vez disso.
let htmlString ="LCD Soundsystem was the musical project of producer <a href='http://www.last.fm/music/James+Murphy' class='bbcode_artist'>James Murphy</a>, co-founder of <a href='http://www.last.fm/tag/dance-punk' class='bbcode_tag' rel='tag'>dance-punk</a> label <a href='http://www.last.fm/label/DFA' class='bbcode_label'>DFA</a> Records. Formed in 2001 in New York City, New York, United States, the music of LCD Soundsystem can also be described as a mix of <a href='http://www.last.fm/tag/alternative%20dance' class='bbcode_tag' rel='tag'>alternative dance</a> and <a href='http://www.last.fm/tag/post%20punk' class='bbcode_tag' rel='tag'>post punk</a>, along with elements of <a href='http://www.last.fm/tag/disco' class='bbcode_tag' rel='tag'>disco</a> and other styles. <br />"let htmlStringData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)!let options:[String:AnyObject]=[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding]let attributedHTMLString =try!NSAttributedString(data: htmlStringData, options: options, documentAttributes:nil)let string = attributedHTMLString.string
Ou, como faria Irshad Mohamed nos comentários:
let attributed =tryNSAttributedString(data: htmlString.data(using:.unicode)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes:nil)
print(attributed.string)
Esta parece ser a abordagem mais limpa e funciona maravilhosamente bem! É melhor deixar a estrutura do Foundation testada em batalhas cuidar disso para você, em vez de escrever analisadores fragmentados por conta própria.
Shyam Bhat
4
Limpar \ limpo!! let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)a maioria das pessoas prefere escolher respostas pequenas e fáceis de entender.
Irshad Mohamed
1
Obrigado pela solução! É possível salvar os espaços e quebras de linha enquanto removemos as tags html? Atualmente, todas as quebras de linha são desconsideradas na nova string.
Astha Gupta
7
Apenas um aviso usando isto: conversão (atribuição) de estilo HTML lenta! . Um engenheiro da CoreText da WWDC me disse que isso não é mais mantido e que ele se esqueceu completamente disso.
Sirenes de
1
Só um aviso sobre o aviso anterior: vamos ver alguns dados antes de descartar um método por ser muito "lento". Existem muitas bibliotecas C que você usa (muitas vezes sem perceber) que não requerem muita manutenção. Isso não é necessariamente uma coisa ruim.
Joony,
10
Solução de Mohamed, mas como uma extensão de String em Swift 4.
ou você pode usar assim: func deleteHTMLTag () -> String {return self.replacingOccurrences (of: "(? i) </? \\ b [^ <] *>", com: "", opções: .regularExpression , range: nil)}
Anil Kumar
Este regex não remove o código html para mim. String de exemplo: "<b> Gatos gostam </b> de fazer algo". Não investiguei mais por que não funciona. Mas text.replacingOccurrences (of: "<[^>] +>", ....) funciona para meus casos simples.
Para mim, isso funcionou, primeiro removo qualquer estilo CSS embutido e, depois, todas as tags HTML. Provavelmente não é sólido como a opção NSAttributedString, mas é muito mais rápido para o meu caso.
Respostas:
Hmm, eu tentei sua função e funcionou em um pequeno exemplo:
Você pode dar um exemplo de um problema?
Versão Swift 4 e 5:
fonte
<p foo=">now what?">Paragraph</p>
string.replacingOccurrences(of: "<[^>]+>", with: "", options: String.CompareOptions.regularExpression, range: nil)
Visto que HTML não é uma linguagem regular (HTML é uma linguagem livre de contexto ), você não pode usar Expressões regulares. Consulte: Usando expressões regulares para analisar HTML: por que não?
Eu consideraria usar NSAttributedString em vez disso.
Ou, como faria Irshad Mohamed nos comentários:
fonte
let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)
a maioria das pessoas prefere escolher respostas pequenas e fáceis de entender.Solução de Mohamed, mas como uma extensão de String em Swift 4.
fonte
Estou usando a seguinte extensão para remover elementos HTML específicos:
Isso torna possível remover apenas
<a>
tags de uma string, por exemplo:fonte
Happy Coding
fonte
4 rápido:
fonte
Atualizado para Swift 4:
fonte
Eu prefiro usar uma expressão regular do que usar a conversão HTML NSAttributedString, esteja ciente de que consome muito tempo e precisa ser executado no thread principal também. Mais informações aqui: https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-initwithdata
Para mim, isso funcionou, primeiro removo qualquer estilo CSS embutido e, depois, todas as tags HTML. Provavelmente não é sólido como a opção NSAttributedString, mas é muito mais rápido para o meu caso.
fonte