मैं एक स्ट्रिंग से HTML टैग कैसे निकालूं ताकि मैं स्वच्छ पाठ का उत्पादन कर सकूं?
let str = string.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil)
print(str)
मैं एक स्ट्रिंग से HTML टैग कैसे निकालूं ताकि मैं स्वच्छ पाठ का उत्पादन कर सकूं?
let str = string.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil)
print(str)
जवाबों:
हम्म, मैंने आपके कार्य की कोशिश की और इसने एक छोटे से उदाहरण पर काम किया:
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. "
क्या आप किसी समस्या का उदाहरण दे सकते हैं?
स्विफ्ट 4 और 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)
<p foo=">now what?">Paragraph</p>
string.replacingOccurrences(of: "<[^>]+>", with: "", options: String.CompareOptions.regularExpression, range: nil)
चूंकि HTML एक नियमित भाषा नहीं है (HTML एक संदर्भ-मुक्त भाषा है), आप नियमित अभिव्यक्ति का उपयोग नहीं कर सकते। देखें: HTML को पार्स करने के लिए नियमित अभिव्यक्तियों का उपयोग करना: क्यों नहीं?
मैं इसके बजाय NSAttributedString का उपयोग करने पर विचार करूंगा।
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
या, जैसा कि टिप्पणी में इरशाद मोहम्मद करेंगे:
let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)
print(attributed.string)
let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)
ज्यादातर लोग ऐसे उत्तर चुनना पसंद करते हैं जो छोटे और समझने में आसान हों।
मोहम्मद समाधान लेकिन स्विफ्ट 4 में एक स्ट्रिंग विस्तार के रूप में।
extension String {
func stripOutHtml() -> String? {
do {
guard let data = self.data(using: .unicode) else {
return nil
}
let attributed = try NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
return attributed.string
} catch {
return nil
}
}
}
मैं विशिष्ट HTML तत्वों को निकालने के लिए निम्नलिखित एक्सटेंशन का उपयोग कर रहा हूं:
extension String {
func deleteHTMLTag(tag:String) -> String {
return self.stringByReplacingOccurrencesOfString("(?i)</?\(tag)\\b[^<]*>", withString: "", options: .RegularExpressionSearch, range: nil)
}
func deleteHTMLTags(tags:[String]) -> String {
var mutableString = self
for tag in tags {
mutableString = mutableString.deleteHTMLTag(tag)
}
return mutableString
}
}
यह केवल <a>
एक स्ट्रिंग से टैग हटाने के लिए संभव बनाता है , जैसे:
let string = "my html <a href="">link text</a>"
let withoutHTMLString = string.deleteHTMLTag("a") // Will be "my html link text"
extension String{
var htmlStripped : String{
return self.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
}
}
हैप्पी कोडिंग
स्विफ्ट 4:
extension String {
func deleteHTMLTag(tag:String) -> String {
return self.replacingOccurrences(of: "(?i)</?\(tag)\\b[^<]*>", with: "", options: .regularExpression, range: nil)
}
func deleteHTMLTags(tags:[String]) -> String {
var mutableString = self
for tag in tags {
mutableString = mutableString.deleteHTMLTag(tag: tag)
}
return mutableString
}
}
स्विफ्ट 4 के लिए अपडेट किया गया:
guard let htmlStringData = htmlString.data(using: .unicode) else { fatalError() }
let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
.documentType: NSAttributedString.DocumentType.html
.characterEncoding: String.Encoding.unicode.rawValue
]
let attributedHTMLString = try! NSAttributedString(data: htmlStringData, options: options, documentAttributes: nil)
let string = attributedHTMLString.string
मैं NSAttributedString HTML रूपांतरण का उपयोग करने की तुलना में एक नियमित अभिव्यक्ति का उपयोग करना पसंद करता हूं, सलाह दी जाती है कि बहुत समय लगता है और मुख्य धागे पर भी चलाने की आवश्यकता है। अधिक जानकारी यहाँ: https://developer.apple.com/documentation/foundation/nsattributedstring/1524613-initwithdata
मेरे लिए यह ट्रिक बनी, पहले मैं किसी भी सीएसएस इनलाइन स्टाइल को हटाता हूं, और बाद में सभी HTML टैग। शायद NSAttributedString विकल्प के रूप में ठोस नहीं है, लेकिन मेरे मामले के लिए तेजी से रास्ता।
extension String {
func withoutHtmlTags() -> String {
let str = self.replacingOccurrences(of: "<style>[^>]+</style>", with: "", options: .regularExpression, range: nil)
return str.replacingOccurrences(of: "<[^>]+>", with: "", options: .regularExpression, range: nil)
}
}