2016-06-16 14 views
0

Python 3でいくつかのhtmlを整理したいところです。挿入されたテキストに色と取り消し線の削除されたテキストをマークするためにスパンタグを使用しました。例は:HTMLタグを取り除く文字列を保持する文字列を保持する/取り除く

<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et dolore 
magna aliquyam erat, sed diam voluptua. <span class="inserted"> 
Lorem ipsum</span> Lorem ipsum dolor sit amet, consetetur 
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut 
labore et dolore magna aliquyam erat, sed diam voluptua. At 
vero eos et accusam et justo duo dolores et ea rebum. 
<span class="strikethrough">Lorem ipsum</span> lorem 
<span class="inserted">ipsum</span>. At vero eos et accusam et 
justo duo dolores et ea rebum. Stet clita kasd gubergren, 
no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 

私は何をしたいのは、クラスの挿入 'とspanタグ「取り消し線」の間のテキストを削除するとspanタグの間のテキストを保つspanタグを削除しています。

from html.parser import HTMLParser 

class MLStripper(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.strict = False 
     self.convert_charrefs= True 
     self.fed = [] 
    def handle_data(self, d): 
     self.fed.append(d) 
    def get_data(self): 
     return ''.join(self.fed) 

def strip_tags(html): 
    s = MLStripper() 
    s.feed(html) 
    return s.get_data() 

しかし、タグは(「取り消し線」)特別なクラスを持っている場合、私はspanタグの間のテキストを削除したい:

は、私は、これは間のテキストを保つタグを除去することが判明しました。

どうすればいいですか?

+0

は、正規表現のための簡単なようです。あなたはそれを試しましたか? –

答えて

0

あなたはほぼ正しいです。 handle_starttag()handle_endtag()のメソッドといくつかの変数を使用するだけで、現在の状態を把握することができます。これについて

方法:

from html.parser import HTMLParser 


class MLStripper(HTMLParser): 
    def __init__(self): 
     self.reset() 
     self.strict = False 
     self.convert_charrefs = True 

     self._forbidden = False 
     self._result = [] 

    def handle_starttag(self, tag, attrs): 
     if tag in ['span']: 
      if 'strikethrough' in [a for _, a in attrs]: 
       self._forbidden = True 

    def handle_endtag(self, tag): 
     self._forbidden = False 

    def handle_data(self, data): 
     if not self._forbidden: 
      self._result.append(data) 


st = MLStripper() 
st.feed(''' 
<p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et dolore 
magna aliquyam erat, sed diam voluptua. <span class="inserted"> 
Lorem ipsum</span> Lorem ipsum dolor sit amet, consetetur 
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut 
labore et dolore magna aliquyam erat, sed diam voluptua. At 
vero eos et accusam et justo duo dolores et ea rebum. 
<span class="strikethrough">Lorem ipsum</span> lorem 
<span class="inserted">ipsum</span>. At vero eos et accusam et 
justo duo dolores et ea rebum. Stet clita kasd gubergren, 
no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> 
''') 

print(''.join(st._result)) 

結果:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, 
sed diam nonumy eirmod tempor invidunt ut labore et dolore 
magna aliquyam erat, sed diam voluptua. 
Lorem ipsum Lorem ipsum dolor sit amet, consetetur 
sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut 
labore et dolore magna aliquyam erat, sed diam voluptua. At 
vero eos et accusam et justo duo dolores et ea rebum. 
lorem 
ipsum. At vero eos et accusam et 
justo duo dolores et ea rebum. Stet clita kasd gubergren, 
no sea takimata sanctus est Lorem ipsum dolor sit amet. 
関連する問題