<p><strong>HTML entity parser</strong> is the parser that takes HTML code as input and replace all the entities of the special characters by the characters itself.</p>

<p>The special characters and their entities for HTML are:</p>

<ul>
	<li><strong>Quotation Mark:</strong> the entity is <code>&amp;quot;</code> and symbol character is <code>&quot;</code>.</li>
	<li><strong>Single Quote Mark:</strong> the entity is <code>&amp;apos;</code> and symbol character is <code>&#39;</code>.</li>
	<li><strong>Ampersand:</strong> the entity is <code>&amp;amp;</code> and symbol character is <code>&amp;</code>.</li>
	<li><strong>Greater Than Sign:</strong> the entity is <code>&amp;gt;</code> and symbol character is <code>&gt;</code>.</li>
	<li><strong>Less Than Sign:</strong> the entity is <code>&amp;lt;</code> and symbol character is <code>&lt;</code>.</li>
	<li><strong>Slash:</strong> the entity is <code>&amp;frasl;</code> and symbol character is <code>/</code>.</li>
</ul>

<p>Given the input <code>text</code> string to the HTML parser, you have to implement the entity parser.</p>

<p>Return <em>the text after replacing the entities by the special characters</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;&amp;amp; is an HTML entity but &amp;ambassador; is not.&quot;
<strong>Output:</strong> &quot;&amp; is an HTML entity but &amp;ambassador; is not.&quot;
<strong>Explanation:</strong> The parser will replace the &amp;amp; entity by &amp;
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> text = &quot;and I quote: &amp;quot;...&amp;quot;&quot;
<strong>Output:</strong> &quot;and I quote: \&quot;...\&quot;&quot;
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= text.length &lt;= 10<sup>5</sup></code></li>
	<li>The string may contain any possible characters out of all the 256 ASCII characters.</li>
</ul>

class Solution:
    def entityParser(self, text: str) -> str:
        d = {"&quot;" : "\"", "&apos;" : "\'", "&amp;" : '&', "&gt;" : '>', "&lt;" : '<', "&frasl;" : '/'}
        res = ""
        hold = ""
        b = False
        for char in text:
            if char == '&':
                res += hold
                b = True
                hold = "&"
            elif b:
                hold += char
                match len(hold):
                    case 2:
                        continue
                    case 3:
                        continue
                    case 4:
                        if hold == "&gt;":
                            res += d[hold]
                            hold = ""
                            b = False
                        elif hold == "&lt;":
                            res += d[hold]
                            hold = ""
                            b = False
                        elif hold == "&amp":
                            continue
                        elif hold == "&apo":
                            continue
                        elif hold == "&quo":
                            continue
                        elif hold == "&fra":
                            continue
                        else:
                            res += hold
                            hold = ""
                            b = False     
                    case 5:
                        if hold == "&amp;":
                            res += d[hold]
                            hold = ""
                            b = False
                        elif hold == "&apos":
                            continue
                        elif hold == "&quot":
                            continue
                        elif hold == "&fras":
                            continue
                        else:
                            res += hold
                            hold = ""
                            b = False                            
                    case 6:
                        if hold == "&apos;":
                            res += d[hold]
                            hold = ""
                            b = False
                        elif hold == "&quot;":
                            res += d[hold]
                            hold = ""
                            b = False
                        elif hold == "&frasl":
                            continue
                        else:
                            res += hold
                            hold = ""
                            b = False
                    case 7:
                        if hold == "&frasl;":
                            res += d[hold]
                        else:
                            res += hold
                        hold = ""
                        b = False
            else:
                res += char 
                hold = ""
        if hold:
            res += hold
        return res
169