質問: ['アイアンマン','アイアンマン2'] ``` この場合、文章を検索した時にまず`アイアンマン`についてリンクを付与したなら、問題は発生しませんが、 先に`アイアンマン2`にリンクが付与された場合、その中に含まれる`アイアンマン`が次に付与されてしまいますよね。 これは、作品名が全く異なっても起こりうる問題であると考えています。 お願いします ------- この問題を回避する方法を考えています。 良いアイデアがありましたら、ご教授いただけませんでしょうかm(_ _)m よろしくお願いします。 追記 --- タイトルの長い順から検索していき、当てはまったタイトルが他のタイトルを含んでいる時、他のタイトルをリストから除外して再ループというのが一番効率的でしょうか、、、
回答: こんな感じですかね。 長い順から探して置換するのは、この手の処理では常套手段です。 ``` # text中に存在する全wordsを置換する def rep_words( words, text): # text中のwordを「置換識別子」に置き換える rep_map = {} # 置換識別子 -> 実際に置換したい文字列 のマップ for word in words: if word in text: rep_str = '<<>>' % (len(rep_map) + 1) # 置換識別子 = textに現れないような文字列にする rep_map[rep_str] = '%s' % word text = text.replace( word, rep_str) print(text) # テスト出力 # 置換識別子 -> 置換したい文字列に置き換える for k,v in rep_map.items(): text = text.replace( k,v) return text words = ['アイアンマン','アイアンマン2','アンパンマン'] # wordsは長さの降順であること words.sort(key=len) words.reverse() print(words) print(rep_words(words,'アイアンマン2はアイアンマンとは違う')) print(rep_words(words,'アイアンマンはアンパンマンとは違う')) ```