1

私が直面している問題は、不適切な名前のリンクです...さまざまなファイルに数百の不適切なリンクがあります。

だから私は bash を書いて、リンク を次
<a href="../../../external.html?link=http://www.twitter.com">
<a href="../../external.html?link=http://www.facebook.com/pages/somepage/">
<a href="../external.html?link=http://www.tumblr.com/">
のような直接リンク に置き換えます<a href="http://www.twitter.com>

パターン ../ が 1 回以上繰り返されることはわかっています。また、external.html?link も削除する必要があります。

これを行うにはどうすればよいですか?awk、sed、多分python?? 正規表現が必要ですか?

ご意見ありがとうございます...

4

2 に答える 2

1

これは、正規表現が正しい解決策である場所である可能性があります。属性内のテキストのみを検索しており、内容は規則的で、パターンに適合しています。

次の Python 正規表現は、これらのリンクを見つけます。

r'href="((?:\.\./)+external\.html\?link=)([^"]+)"'

私たちが探すパターンはhref=""、テキストのチャンク内の何かです。その「何か」は、1 つ以上の のインスタンスで始まり、その後に が../続き、その後に引用符external.html?link=を含まないテキストが続きます。"

等号の後の一致したテキストは、簡単に検索できるようにグループ 2 にグループ化されます。グループ 1 はその../../external.html?link=部分を保持します。

部分を完全に削除するだけの場合../../external.html?link=(リダイレクト ページを経由するのではなく、リンクがエンドポイントを直接指すようにするため)、最初のグループを除外して、HTML ファイルで簡単な.sub()操作を行います。

import re
redirects = re.compile(r'href="(?:\.\./)+external\.html\?link=([^"]+)"')

# ...
redirects.sub(r'href="\1"', somehtmlstring)

これは任意の本文テキスト (HTML タグの外側) にも一致する可能性があることに注意してください。これは HTML 対応のソリューションではありません。ただし、そのような本文がない可能性があります。しかし、ある場合は、代わりに BeautifulSoup や lxml などの本格的な HTML パーサーが必要になります。

于 2012-08-25T10:54:02.427 に答える
0

BeautifulSoup や lxml.html などの HTML パーサーを使用します。

于 2012-08-25T10:47:10.960 に答える