from html.parser import HTMLParser class MarkedText(HTMLParser): def __init__(self): super().__init__(convert_charrefs=True) self.depth = 0 self.parts = [] def handle_starttag(self, tag, attrs): if tag == "mark": self.depth += 1 def handle_endtag(self, tag): if tag == "mark": self.depth -= 1 assert self.depth >= 0, "Непарный закрывающий mark" def handle_data(self, data): if self.depth: self.parts.append(data) def extract_marked(source): parser = MarkedText() parser.feed(source) parser.close() assert parser.depth == 0, "Незакрытый mark" return "".join(parser.parts) fixture = "
Noise LABskip{own_example}
" assert extract_marked(fixture) == "LAB{own_example}" assert extract_marked("ABC") == "ABC" assert extract_marked("unmarked
") == "" assert extract_marked("<mark>X</mark>") == "" print(extract_marked(fixture))