2016-08-31 14 views
-1

文字列/行内の単語を見つけ、次のタグを使用してその単語をハイライトするカスタムHTMLページのPythonでスクリプトを書いた。ここでinstanceは単語検索。次のような結果とPython - 正規表現マッチに基づいて文字列にHTMLタグを挿入

<b><font color=\"red\">"+instance+"</font></b> 

:私は(大文字と小文字を区別しない)単語を見つける必要があり enter image description here

はのは、ポート、港、サポート、サポート、サポートなどをすることができ、文字列の中に「ポート」を言わせて、それは十分に簡単です。

pattern = re.compile(word, re.IGNORECASE) 
find_all_instances = pattern.findall(string_to_search) 

しかし、私の文字列は、多くの場合、単一の行に2つの以上のインスタンスを含む、と私は例を変更せずに、それらのインスタンスのそれぞれに <b><font color=\"red\">"+instance+"</font></b>を追加する必要があります。私のアプローチと

問題は、複数の同じ試合でも、文字列の中に見つけることができます ながら、私は、findAllの(完全一致)で見つけられたインスタンスのそれぞれを超えるitterateしようとしていますということです。

for instance in find_all_instances: 
    second_pattern = re.compile(instance) 
    string_to_search = second_pattern.sub("<b><font color=\"red\">"+instance+"</font></b>", string_to_search) 

これは、次のような結果になります。私は

<b><font color="red">Http</font></b> 

を必要とするとき

<b><font color="red"><b><font color="red"><b><font color="red">Http</font></b></font></b></font></b></font> 

私が考えていた私はの正確な部分を見つけることができたならば、私はこれを避けることができるだろうパターンがそれを行う瞬間に代わる文字列 しかし、私はそのような使用法の例を見つけることができませんでした。これは、私が何かを間違ってやっていると信じさせる。

をすべての一致(大文字と小文字を区別しない)の代わりにinstanceを置換せずに挿入する方法がある場合は、感謝します。

答えて

0

多分私はあなたの質問を誤解していますが、最良の選択肢ではないでしょうか?

例:私はすぐにやったhttps://repl.it/DExs

+0

ありがとうございます。それは期待どおりに動作します。 – iluzek

0

わかりましたので、2つの方法! 2番目のループは確かに行く方法です。それはre.subを使用します(他の誰かがコメントしたように)。これは、小文字の検索用語で置き換えられます。

import re 

FILE = open("testing.txt","r") 
word="port" 

#THIS LOOP IS CASE SENSITIVE 
for line in FILE: 
    newline=line.replace(word,"<b><font color=\"red\">"+word+"</font></b>") 
    print newline 

#THIS LOOP IS INCASESENSITIVE 
for line in FILE: 
    pattern=re.compile(word,re.IGNORECASE) 
    newline = pattern.sub("<b><font color=\"red\">"+word+"</font></b>",line) 
    print newline 
関連する問題