2009-06-26 8 views
0

私は自分のウェブサイトを処理しており、ページ上のいくつかのものを変更したいと考えています。テキストを置き換える、Jython、Regex

私は、次の文字列を置換したいのです:

in the 
<SPAN class="Bold"> 
More... 
</SPAN> 
column to your right. 

いくつかの時間が<span>タグを持っていないです。

in the 
More... 
column to your right. 

私は「以下」でこれを交換したいと思います。私はpythonで単純なreplace()を使ってこれをやってみましたが、いつかテキストに<span>というタグがなく、複数の行にあると動作しないようです。私の唯一の考えは正規表現を使用していますが、私は正規表現のスピードアップではない、誰も手を貸すことができますか?

おかげ

EEF

+0

あなたは「下記」に置き換えていますか? 「More ...」の部分、またはそのすべて? –

+0

私は両方の状況でそのすべてを置き換えることを検討しています。 – RailsSon

+0

テキストは常に同じですか?そして、正確に何が出力になるはずですか?テキストが常に同じではなく、「すべて」というテキストで表示される場合は、(存在する場合)と「その他...」だけを意味しますか? –

答えて

2

あなたは文字列 "foo" というのHTMLテキストを持っていると仮定すると、Pythonでこれを実行するコードは次のようになります:

import re 
#re.DOTALL is used to make the . match all characters including newline 
regexp = re.compile('in the.*?More\.\.\..*?column to your right\.', re.DOTALL) 
re.sub(regexp, 'below', foo) 
+0

2つ以上のHTMLページでこれを実行すると、スタックオーバーフローエラーが発生します。ハードリターンを処理するにはre.DOTALLと思われます。 :/ – RailsSon

+1

@Eef:私が知る限り、Jaredのソリューションはうまくいくはずです。スタックオーバーフローメッセージを再現できません。 DOTALLは、スタックオーバーフローを引き起こす可能性はほとんどありません。それはジャレッドが言ったことだけです。 'in'と 'More'の間のもの(改行を含む)と一致する必要があります。 Jaredのソリューションと完全なトレースバックとエラーメッセージを実装したコードを示してください。 –

+0

この解決策はうまくいきました。私の環境には問題がありましたが、これは解決されており、問題をもう解決していません。乾杯 – RailsSon

0

これを試してみてください。

import re 
pattern = re.compile('(?:<SPAN class="Bold">\s*)?More\.\.\.(?:\s*</SPAN>)?') 
str = re.sub(pattern, 'below', str) 

(?:…)シンタックスは参照できない非キャプチャグループです逆参照として。

関連する問題