2017-07-21 11 views
0

は、この(内容は、随時、我々はそれが有効なHTMLファイルだということを知っているすべてを変更することがあります)のように見えます Original fileハイライトテキストprogrammaticly

ここで、このHTMLファイル内のテキスト部分を強調したいと思います。 「Worldこれは私の段落別のです」というテキストを強調したいとします。

予想される出力:

<HTML> 
    <BODY> 
     <h1>Hello <mark>World</mark></h1> 
     <p> 
      <mark>This is my paragraph</mark> 
     </p> 
     <div> 
      <mark>another</mark> text 
     </div> 
    </BODY> 
</HTML> 

Expected output

あなたは持っている:

  • 生のHTMLファイルを(上図のように)
  • 内に表示されますが、確かに知っ文HTMLのテキストバージョンです。この文は複数のHTMLノード内に置くことができます(上記の例のように、親ノード:h1、p、div)。
  • ハイライト処理を自動化するためのpythonスクリプトスクリプトファイル。

Regexは解決策を探し始めるのに適していますが、しかし、テキストが複数の親で分割されているシナリオに入るとすぐに私は立ち往生してしまいました。さらに、単語間に別の要素を配置することもできます(たとえばimgなど)。

ヒントをお探しですか?解決策はどこにありますか?

+0

A)は、あなたが私たちが**(通常はひんしゅくを買う、場合でも、あまりにもないのに十分に狭い**広すぎるこれ、あなたのためのプログラムを書きたいと思っている場合は、あなたの質問には** **不明ですSOはコード・ライティング・サービスではないため、広範囲に及ぶ)。 B)オフサイトリソースのリクエストである、これを行う図書館を見つけるための私たちのリクエスト。オフトピック:リソースリクエスト**;またはC)[MCVE]を含む[help/on-topic]に質問をデバッグするために必要なものすべてを提供していない限り、** off-topic:no MCVE **のコードをデバッグする要求あなたが試みたと述べたにもかかわらず、コードはありません。 – Makyen

答えて

0

この目的に適したソフトウェアは[BeautifulSoup]です。 1replace_withメソッドを使用して、文字列またはタグを置き換えます。 new_tagメソッドを使用して、既存のタグの代わりに配置するタグを作成します。まず、既存のHTMLの「スープ」を作成します。 BeautifulSoupに関連した操作の例はたくさんあります。

このサンプルコードでは、HTMLで最初に現れる「Hello world」を処理する方法を示します。

>>> import bs4 
>>> soup = bs4.BeautifulSoup(open('temp.htm').read(), 'lxml') 
>>> new_h1 = soup.new_tag('h1') 
>>> new_h1.string = 'Hello ' 
>>> mark = soup.new_tag('mark') 
>>> mark.string = 'World' 
>>> mark 
<mark>World</mark> 
>>> new_h1.append(mark) 
>>> new_h1 
<h1>Hello <mark>World</mark></h1> 
>>> h1 = soup.h1 
>>> h1.replace_with(new_h1) 
<h1>Hello World</h1> 
>>> for line in soup.prettify().split('\n'): 
...  line 
...  
'<html>' 
' <body>' 
' <h1>' 
' Hello' 
' <mark>' 
' World' 
' </mark>' 
' </h1>' 
' <p>' 
' This is my paragraph' 
' </p>' 
' <div>' 
' another text' 
' </div>' 
' </body>' 
'</html>' 
0

たぶん私はすべてのNavigableString

https://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#contentsこのリンクは、より多くの情報が含まれている取得した後(体が親に聞かせて)bodyタグ内のすべての子供たちを取得するためにbeautifulsoup使用します。

マークタグ<mark> Content </mark>を使用して文字列(コンテンツ)を再構築することができます。これは、美しいスープからコンテンツとタグを抽出し、再構成された文字列を戻すことができるからです。正規表現は(ということをしない)あなたは、HTMLのツリー構造の下、いくつかの再帰を行う使用することができますあまりにも多くの痛み

それとも正規表現は、ヒン​​トとして必ず

0

ための厄介なソリューションです:


ステップ1:リスト内の%ですべてのタグを交換し、交換したタグを保存

s1 = %%%Hello World%%This is my paragraph%%%%another%text%%%  
tags = ['<HTML>','<body>,<h1>,</h1>,<p> , ...] 

ステップ2:正規表現を検索

World(\s|%)+This(\s|%)+is(\s|%)+my(\s|%)+paragraph(\s|%)+another 
s1

ステップ3:最後にマッチして</mark>の冒頭に挿入<mark>。各%グループについては、グループの前に</mark>を挿入し、グループの最後に<mark>を挿入します。

%%%Hello <mark>World</mark>%%<mark>This is my paragraph</mark>%%%%<mark>another</mark>%text%%% 

ステップ4:今、タグリストを使用して、リストからタグを復元します。

<HTML><body><h1>Hello <mark>World</mark></h1><p><mark>This is my paragraph</mark></p> ... 
関連する問題