web-dev-qa-db-ja.com

python .replace()正規表現

私は "</html>"タグの後のすべてをつかんでそれを削除しようとしていますが、私のコードは何もしていないようです。 .replace()は正規表現をサポートしていませんか?

z.write(article.replace('</html>.+', '</html>'))
139
user1442957

いいえ。Pythonの正規表現は re モジュールによって処理されます。

article = re.sub(r'(?is)</html>.+', '</html>', article)
215

@Ignácioは正しい、+ 1、もっと例を挙げよう。

正規表現を使ってテキストを置き換えるには、 re.sub 関数を使います。

sub(pattern、repl、string [、count、flags])

patternの非永続インスタンスを、stringとして渡されたテキストで置き換えます。一致を分析して特定のグループキャプチャに関する情報を抽出する必要がある場合は、必要に応じて、関数をstring引数に渡します。 詳細はこちら

>>> import re
>>> re.sub(r'a', 'b', 'banana')
'bbnbnb'

>>> re.sub(r'/\d+', '/{id}', '/andre/23/abobora/43435')
'/andre/{id}/abobora/{id}'
17
André Pena

正規表現にreモジュールを使うことができますが、正規表現はあなたが望むものにはおそらくやり過ぎです。私は何かを試すかもしれません

z.write(article[:article.index("</html>") + 7]

これははるかにクリーンで、正規表現ベースのソリューションよりはるかに速いはずです。

6
Julian

このような場合、reモジュールを使うのがやり過ぎる場合は、split(またはrsplit)メソッドを次のように使用してください。

se='</html>'
z.write(article.split(se)[0]+se)

例えば、

#!/usr/bin/python

article='''<html>Larala
Ponta Monta 
</html>Kurimon
Waff Moff
'''
z=open('out.txt','w')

se='</html>'
z.write(article.split(se)[0]+se)

out.txt

<html>Larala
Ponta Monta 
</html>
1
norio