স্ট্রিং থেকে এইচটিএমএল ট্যাগ কেটে ফেলা হচ্ছে


98

আমি কোনও স্ট্রিং থেকে এইচটিএমএল ট্যাগগুলি কীভাবে সরিয়ে ফেলব যাতে আমি পরিষ্কার পাঠ্য আউটপুট করতে পারি?

let str = string.stringByReplacingOccurrencesOfString("<[^>]+>", withString: "", options: .RegularExpressionSearch, range: nil)
print(str)


4
নেতৃত্বে, এই প্রশ্নের অনেক মূল্য রয়েছে তবে যেমন রয়েছে তবে এটি বন্ধ হয়ে যাওয়ার সম্ভাবনা রয়েছে কারণ আপনি একটি পরিষ্কার প্রশ্ন জিজ্ঞাসা করছেন না: এটি একটি পুনঃপ্রজননযোগ্য পরিস্থিতি। আমি আপনাকে জিজ্ঞাসা করব কীভাবে জিজ্ঞাসা করা উচিত সেই অনুযায়ী আপনার প্রশ্নটির পুনরায় উত্তর দেওয়ার পরামর্শ দিই । আমি চাই না যে প্রশ্নটি মুছে ফেলা হোক।
তুনাকি

4
হ্যাঁ স্ট্যাকওভারফ্লো ... এটি কীভাবে "অফ টপিক" বন্ধ? এটি "এইচটিএমএল ট্যাগগুলি স্যুইফট সরান" এর জন্য # 1 গুগল ফলাফল।
canhazbit

4
@ ক্যানহাজ্বিটস আমি ঠিক জানি! পুনরায় খুলতে এটিকে মনোনয়নের জন্য পুনরায় খুলুন ক্লিক করুন।
নেতৃত্বে

4
সুইফট 3: স্ট্রিং.রেপ্লেসিংঅ্যাক্যুরিয়েন্সস (এর: "" [[^>] +> "", এর সাথে: "", বিকল্পগুলি:। নিয়মিত এক্সপ্রেসন, রেঞ্জ: শূন্য)
এটাইলুজ

উত্তর:


150

হুম, আমি আপনার ফাংশনটি চেষ্টা করেছিলাম এবং এটি একটি ছোট উদাহরণে কাজ করেছে:

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)

25
<LOL> হা হা! </ LOL>
স্টিভ রোজেনবার্গ


4
উদাহরণস্বরূপ, এইচটিএমএলটির এই অংশটি চেষ্টা করুন:<p foo=">now what?">Paragraph</p>
প্যারাম্যাগনেটিক ক্রোস্যান্ট

32
string.replacingOccurrences(of: "<[^>]+>", with: "", options: String.CompareOptions.regularExpression, range: nil)
সুইফটে

5
সুইফট 4 স্ট্রিং.রেপসিংঅ্যাক্সিয়েন্সগুলিতে (এর: "" [<^>] +> ", এর সাথে:" ", অপশন: .regularExpression, ব্যাপ্তি: শূন্য)
রায়গটাইম

30

যেহেতু এইচটিএমএল কোনও নিয়মিত ভাষা নয় (এইচটিএমএল একটি প্রসঙ্গমুক্ত ভাষা), আপনি নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারবেন না। দেখুন: এইচটিএমএল পার্স করতে নিয়মিত এক্সপ্রেশন ব্যবহার করে: কেন নয়?

আমি এর পরিবর্তে এনএসএট্রিবিউটেড স্ট্রিং ব্যবহার বিবেচনা করব।

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)

7
এটি সবচেয়ে পরিষ্কার পদ্ধতির বলে মনে হচ্ছে এবং এটি দুর্দান্তভাবে কাজ করে! যুদ্ধের-পরীক্ষিত ফাউন্ডেশন কাঠামোটি আপনার নিজের পক্ষে ফ্লেকি পার্সার লেখার পরিবর্তে আপনার জন্য এটি হ্যান্ডেল করা ভাল।
শ্যাম ভাট

4
পরিষ্কার !! let attributed = try NSAttributedString(data: htmlString.data(using: .unicode)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) print(attributed.string)বেশিরভাগ লোক উত্তরগুলি পছন্দ করতে পছন্দ করে যা ছোট এবং সহজেই বোঝা যায়।
ইরশাদ মোহাম্মদ

4
সমাধানের জন্য ধন্যবাদ! আমরা এইচটিএমএল ট্যাগগুলি সরানোর সময় স্পেস এবং লাইন ব্রেকগুলি সংরক্ষণ করা কি সম্ভব? বর্তমানে, সমস্ত স্ট্রিং ব্রেকগুলি নতুন স্ট্রিংয়ে উপেক্ষা করা হয়েছে।
আস্ত গুপ্ত

7
এটি ব্যবহার করে কেবল একটি সতর্কতা: এইচটিএমএল স্টাইল রূপান্তরকরণ (বিশিষ্ট) ধীর! । ডাব্লুডাব্লুডিসির একজন কোর্টেক্সট ইঞ্জিনিয়ার আমাকে বলেছিলেন এটি আর রক্ষণাবেক্ষণ করা হয় না এবং তিনি এটি সম্পর্কে পুরোপুরি ভুলে গিয়েছিলেন।
সাইরেনস

4
পূর্ববর্তী সতর্কতা সম্পর্কে কেবল একটি সতর্কতা: খুব "ধীর" হওয়ার জন্য কোনও পদ্ধতি বাতিল করার আগে আসুন আমরা কিছু তথ্য দেখি। প্রচুর সি লাইব্রেরি রয়েছে যা আপনি ব্যবহার করেন (প্রায়শই এটি উপলব্ধি না করে) যার বেশি রক্ষণাবেক্ষণের প্রয়োজন হয় না। এটি অগত্যা কোনও খারাপ জিনিস নয়।
জুনি

13

মোহাম্মদ সমাধান তবে সুইফট 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
        }
    }
}

8

আমি নির্দিষ্ট এইচটিএমএল উপাদানগুলি সরাতে নিম্নলিখিত এক্সটেনশনটি ব্যবহার করছি:

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"

@ মিস্টার লিস্টার কী এইচটিএমএল সমস্ত ট্যাগ মুছে ফেলার এবং এই <a href=""> লিঙ্ক পাঠ্য </a> রাখার উপায় আছে?
মাজন কাসের


2

দ্রুত 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
বা আপনি এটির মতো ব্যবহার করতে পারেন: ফান্ট ডিলিটএইচটিএমএল ট্যাগ () -> স্ট্রিং {ফিরুন স্ব-পুনঃস্থাপনকারী ঘটনা (এর: "(? i) </? [বি [] <] *>", এর সাথে: "", বিকল্পগুলি: নিয়মিত এক্সপ্রেশন , পরিসীমা: শূন্য)}
অনিল কুমার

এই রেজেক্সটি আমার জন্য এইচটিএমএল কোডটি সরিয়ে দেয় না। উদাহরণ স্ট্রিং: "<b> বিড়ালরা কিছু করতে </ b>"। এটি কেন কাজ করে না সে কারণে আরও তদন্ত করেনি। তবে টেক্সট.রেপ্লেসিংঅ্যাক্সিয়েন্সস (এর: "<[^>] +>", ....) আমার সাধারণ ক্ষেত্রে কাজ করে।
বেনিয়ামিন পিট 9

2

সুইফট 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

PARAM: আপনি .documentType পর দিতে ভুলে গেছেন ','
cwgso

0

আমি এনএসএট্রিবিউটেড স্ট্রিং এইচটিএমএল রূপান্তর ব্যবহার করার চেয়ে নিয়মিত ভাব প্রকাশ করতে পছন্দ করি, এটি পরামর্শ দিন যে এটি বেশ সময় সাশ্রয়ী এবং মূল থ্রেডে চালানোও দরকার। এখানে আরও তথ্য: https://developer.apple.com/docamentation/foundation/nsattributesstring/1524613-initwithdata

আমার জন্য এটি কৌশলটি তৈরি করে, প্রথমে আমি কোনও সিএসএস ইনলাইন স্টাইলিং এবং পরে সমস্ত এইচটিএমএল ট্যাগ মুছে ফেলি। সম্ভবত এনএসএট্রিবিউটেড স্ট্রিং বিকল্প হিসাবে শক্ত নয়, তবে আমার ক্ষেত্রে দ্রুততর way

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)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.