Diese Frage hat viel Wert, aber so wie sie ist, wird sie wahrscheinlich geschlossen, weil Sie keine klare Frage stellen: Es ist ein nicht reproduzierbares Szenario. Ich schlage vor, dass Sie Ihre Frage gemäß How to Ask umformulieren . Ich möchte nicht, dass diese Frage gelöscht wird.
Tunaki
3
lol stackoverflow ... wie wird das als "off topic" geschlossen? Es ist das beste Google-Ergebnis für "Swift HTML-Tags entfernen".
Canhazbits
2
@canhazbits ich weiß richtig! Klicken Sie auf Erneut öffnen, um es für eine erneute Öffnung zu nominieren.
Hmm, ich habe deine Funktion ausprobiert und sie hat an einem kleinen Beispiel funktioniert:
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. "
Können Sie ein Beispiel für ein Problem geben?
Swift 4 und 5 Version:
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)
Ich würde stattdessen NSAttributedString verwenden.
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
Oder wie Irshad Mohamed es in den Kommentaren tun würde:
let attributed =tryNSAttributedString(data: htmlString.data(using:.unicode)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes:nil)
print(attributed.string)
Dies scheint der sauberste Ansatz zu sein und es funktioniert wunderbar gut! Es ist am besten, das kampferprobte Foundation-Framework dies für Sie erledigen zu lassen, anstatt selbst schuppige Parser zu schreiben.
Shyam Bhat
4
Reinigen!! let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)Die meisten Menschen bevorzugen Antworten, die klein und leicht zu verstehen sind.
Irshad Mohamed
1
Danke für die Lösung! Ist es möglich, Leerzeichen und Zeilenumbrüche zu speichern, während wir HTML-Tags entfernen? Derzeit werden alle Zeilenumbrüche in der neuen Zeichenfolge nicht berücksichtigt.
Astha Gupta
7
Nur eine Warnung, die dies verwendet: HTML-Stil konvertieren (zuschreiben) langsam! . Ein CoreText-Ingenieur bei WWDC sagte mir, dass dies nicht mehr gewartet wird und er es völlig vergessen hatte.
Sirenen
1
Nur eine Warnung zur vorherigen Warnung: Sehen wir uns einige Daten an, bevor wir eine Methode verwerfen, die zu "langsam" ist. Es gibt viele C-Bibliotheken, die Sie verwenden (oft ohne es zu merken) und die nicht viel Wartung erfordern. Das ist nicht unbedingt eine schlechte Sache.
Joony
10
Mohamed-Lösung, aber als String-Erweiterung in Swift 4.
oder Sie können Folgendes verwenden: func deleteHTMLTag () -> String {return self.replacingOccurrences (von: "(? i) </? \\ b [^ <] *>", mit: "", Optionen: .regularExpression , Bereich: Null)}
Anil Kumar
Dieser reguläre Ausdruck entfernt für mich keinen HTML-Code. Beispielzeichenfolge: "<b> Katzen mögen </ b> etwas tun". Ich habe nicht mehr nachgeforscht, warum es nicht funktioniert. Aber text.replacingOccurrences (von: "<[^>] +>", ....) funktioniert für meine einfachen Fälle.
Für mich war dies der Trick. Zuerst entferne ich alle CSS-Inline-Stile und später alle HTML-Tags. Wahrscheinlich nicht solide wie die NSAttributedString-Option, aber für meinen Fall viel schneller.
Antworten:
Hmm, ich habe deine Funktion ausprobiert und sie hat an einem kleinen Beispiel funktioniert:
Können Sie ein Beispiel für ein Problem geben?
Swift 4 und 5 Version:
quelle
<p foo=">now what?">Paragraph</p>
string.replacingOccurrences(of: "<[^>]+>", with: "", options: String.CompareOptions.regularExpression, range: nil)
Da HTML keine reguläre Sprache ist (HTML ist eine kontextfreie Sprache), können Sie keine regulären Ausdrücke verwenden. Siehe: Verwenden von regulären Ausdrücken zum Parsen von HTML: Warum nicht?
Ich würde stattdessen NSAttributedString verwenden.
Oder wie Irshad Mohamed es in den Kommentaren tun würde:
quelle
let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)
Die meisten Menschen bevorzugen Antworten, die klein und leicht zu verstehen sind.Mohamed-Lösung, aber als String-Erweiterung in Swift 4.
quelle
Ich verwende die folgende Erweiterung, um bestimmte HTML-Elemente zu entfernen:
Dies ermöglicht es, nur
<a>
Tags aus einer Zeichenfolge zu entfernen , z.quelle
Viel Spaß beim Codieren
quelle
schnell 4:
quelle
Aktualisiert für Swift 4:
quelle
Ich bevorzuge die Verwendung eines regulären Ausdrucks als die Verwendung der NSAttributedString-HTML-Konvertierung. Beachten Sie, dass dies ziemlich zeitaufwändig ist und auch im Hauptthread ausgeführt werden muss. Weitere Informationen finden Sie hier: https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-initwithdata
Für mich war dies der Trick. Zuerst entferne ich alle CSS-Inline-Stile und später alle HTML-Tags. Wahrscheinlich nicht solide wie die NSAttributedString-Option, aber für meinen Fall viel schneller.
quelle