2010-11-30 9 views
1

私はDjango Webアプリケーションでいくつかのレガシーテキストを提供しようとしています。それはかなりシンプルな範囲です。テキストにはいくつかのアマゾンURLがあり、私はそれらの末尾に私の?tag=xxx識別子を書きたいと思う。Python:URLを見つけてクエリ文字列のペアを追加する

私はすぐに私のテキストを通過させることができるテンプレートフィルタを書いたが、私は正規表現ロジックを書くことに多少なりとも取り組んでいる。

t = text_from_template_engine 
return re.sub(r'(https?://(?:www\.)?amazon\.co\.uk[\S]+)', r'\\\1?tag=xxx', t) 

これは非常に基本的なレベルで動作するようですが、URLが既に(有機アマゾンのURLの多くは、デフォルトでそうであるように)クエリ文字列を持っている場合、私の代わりに疑問符のアンパサンドが必要になります。

すぐに2つの疑問符を検出し、2番目の疑問符を置き換えることがあります。私はその提案には開いています。

私が本当に探しているのは、置き換えられた文字列を返すと予想される別のメソッド(既存の疑問符を検出できる)に、見つかった文字列を渡すことができるregex-replaceです。 PHPのpreg_replace_callback(など)のようなもの。それは存在しますか?

答えて

2

はい、re.subの2番目のパラメータは、matchオブジェクトを受け取り、文字列を返す関数です。 the documentationを参照してください。

+0

マインド...爆発...いつものように、私はRTFMする必要があります;) – Oli

0

2つの疑問符を検出し、2番目の疑問符をすぐに置き換える方法があります。私はその提案には開いています。

これで2つの疑問符が表示されます。

(\?|(\?\?)) 

私は二重の疑問符のための非パッシブグループ番号は$ 4となると信じていますが、それをチェックして、あなたの置き換えで、単一の疑問符を再び追加することができます倍にする必要があります。

0

URLを見つけたら、正規表現にハックするのではなく、parsing it properlyの方がよいでしょう。

+1

しかし、それは私の問題です。途中で干渉することができるように、私はどのように見つけて交換しますか? – Oli

関連する問題