Led, pertanyaan ini memiliki banyak nilai tetapi apa adanya, kemungkinan besar akan ditutup karena Anda tidak mengajukan pertanyaan yang jelas: ini adalah skenario yang tidak dapat direproduksi. Saya sarankan Anda mengubah pertanyaan Anda sesuai dengan Cara Bertanya . Saya tidak ingin pertanyaan itu dihapus.
Tunaki
3
lol stackoverflow ... bagaimana ini ditutup sebagai "di luar topik"? Ini adalah hasil google # 1 untuk "Swift remove html tags".
canhazbits
2
@canhazbits saya tahu benar! Klik buka kembali untuk menominasikannya untuk dibuka kembali.
Hmm, saya mencoba fungsi Anda dan berhasil pada contoh kecil:
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. "
Bisakah Anda memberi contoh masalah?
Versi Swift 4 dan 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)
Saya akan mempertimbangkan untuk menggunakan NSAttributedString sebagai gantinya.
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
Atau, seperti yang dilakukan Irshad Mohamed dalam komentarnya:
let attributed =tryNSAttributedString(data: htmlString.data(using:.unicode)!, options:[NSDocumentTypeDocumentAttribute:NSHTMLTextDocumentType], documentAttributes:nil)
print(attributed.string)
Ini tampaknya pendekatan yang paling bersih dan bekerja dengan sangat baik! Sebaiknya biarkan framework Foundation yang teruji pertempuran menangani ini untuk Anda, daripada menulis parser tidak stabil sendiri.
Shyam Bhat
4
Bersih!! let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)kebanyakan orang lebih suka memilih jawaban yang kecil dan mudah dimengerti.
Irshad Mohamed
1
Terima kasih atas solusinya! Apakah mungkin untuk menyimpan spasi dan jeda baris sementara kita menghapus tag html? Saat ini, semua pemisah baris diabaikan di string baru.
Astha Gupta
7
Hanya peringatan menggunakan ini: Pengubahan gaya HTML (pengaitan) lambat! . Seorang insinyur CoreText di WWDC mengatakan kepada saya bahwa ini tidak lagi dipertahankan dan dia telah melupakannya sepenuhnya.
Sirene
1
Hanya peringatan tentang peringatan sebelumnya: Mari kita lihat beberapa data sebelum kita membuang metode karena terlalu "lambat". Ada banyak pustaka C yang Anda gunakan (seringkali tanpa disadari) yang tidak memerlukan banyak pemeliharaan. Itu tidak selalu berarti buruk.
Joony
11
Solusi Mohamed tetapi sebagai ekstensi String di Swift 4.
atau Anda dapat menggunakan seperti ini: func deleteHTMLTag () -> String {return self.replacingOccurrences (dari: "(? i) </? \\ b [^ <] *>", dengan: "", opsi: .regularExpression , kisaran: nil)}
Anil Kumar
Regex ini tidak menghapus kode html untuk saya. Contoh string: "<b> Kucing suka </b> melakukan sesuatu". Tidak menyelidiki lebih lanjut alasan mengapa itu tidak berhasil. Tapi text.replacingOccurrences (dari: "<[^>] +>", ....) berfungsi untuk kasus sederhana saya.
Bagi saya ini membuat trik, pertama saya menghapus semua gaya sebaris CSS, dan kemudian semua tag HTML. Mungkin tidak sekuat opsi NSAttributedString, tetapi jauh lebih cepat untuk kasus saya.
Jawaban:
Hmm, saya mencoba fungsi Anda dan berhasil pada contoh kecil:
Bisakah Anda memberi contoh masalah?
Versi Swift 4 dan 5:
sumber
<p foo=">now what?">Paragraph</p>
string.replacingOccurrences(of: "<[^>]+>", with: "", options: String.CompareOptions.regularExpression, range: nil)
Karena HTML bukan bahasa biasa (HTML adalah bahasa tanpa konteks ), Anda tidak dapat menggunakan Ekspresi Reguler. Lihat: Menggunakan ekspresi reguler untuk mengurai HTML: mengapa tidak?
Saya akan mempertimbangkan untuk menggunakan NSAttributedString sebagai gantinya.
Atau, seperti yang dilakukan Irshad Mohamed dalam komentarnya:
sumber
let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)
kebanyakan orang lebih suka memilih jawaban yang kecil dan mudah dimengerti.Solusi Mohamed tetapi sebagai ekstensi String di Swift 4.
sumber
Saya menggunakan ekstensi berikut untuk menghapus elemen HTML tertentu:
Ini memungkinkan untuk hanya menghapus
<a>
tag dari string, misalnya:sumber
Selamat Coding
sumber
cepat 4:
sumber
Diperbarui untuk Swift 4:
sumber
Saya lebih suka menggunakan ekspresi reguler daripada menggunakan konversi HTML NSAttributedString, perhatikan bahwa cukup memakan waktu dan perlu dijalankan di utas utama juga. Informasi lebih lanjut di sini: https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-initwithdata
Bagi saya ini membuat trik, pertama saya menghapus semua gaya sebaris CSS, dan kemudian semua tag HTML. Mungkin tidak sekuat opsi NSAttributedString, tetapi jauh lebih cepat untuk kasus saya.
sumber