私は基本的に、RSS コンテンツを宣伝文として DB に保存する Python で書かれた RSS インデックス作成アプリを持っています。アプリが最初に記事のコンテンツを処理したとき、特定の条件に一致しないすべてのリンクをコメントアウトしました。次に例を示します。
<a href="http://google.com">Google</a>
なりました:
<!--<a href="http://google.com">Google</a>--> Google
ここで、これらの古い記事をすべて処理し、リンクを変更する必要があります。したがって、BeautifulSoup 4 を使用すると、以下を使用してコメントを簡単に見つけることができます。
links = soup.findAll(text=lambda text:isinstance(text, Comment))
for link in links:
text = re.sub('<[^>]*>', '', link.string)
# any html in the link tag was escaped by BS4, so need to convert back
text = text.replace('&lt;','<')
text = text.replace('&gt;','>')
find = link.string + " " + text
上記の「検索」の出力は次のとおりです。
<!--<a href="http://google.com">Google</a>--> Google
これにより.replace()
、コンテンツに対して簡単に実行できます。
今私が抱えている問題 (そしてこれは単純だと確信しています) は、複数行の検索/置換です。Beautiful Soup が最初にリンクをコメントアウトしたとき、一部は次のように変換されました。
<!--<a href="http://google.com">Google
</a>--> Google
また
<!--<a href="http://google.com">Google</a>-->
Google
したがって、複数行をカバーしていないため、明らかに機能しませんreplace(old,new)
。replace()
誰かが正規表現の複数行の検索/置換を手伝ってくれますか? 大文字と小文字を区別する必要があります。