私は置き換えたい複数の行の文字列を持っていますが、なぜ機能していないのかわかりません。何らかの理由で、文字列のピリオドが正規表現の一致を停止します。ピリオドでマルチライン正規表現の代用を停止しますか?
マイ文字列:
s = """
[some_previous_text]
foo
[some_text_after]
"""
私が最初に試したが、それは何も一致していないもの::
>>> import re
>>> s = "<start>\none_period .\n<end>"
>>> print re.sub("<start>[^.]*<end>", "foo", s)
<start>
one_period .
<end>
私はで終わるしたいのですがどのような
s = """
[some_previous_text]
<start>
one_period .
<end>
[some_text_after]
"""
しかし、私は期間を使い切ったとき、それは正常に働いた:
私は期間前に<end>
タグを入れたときに
>>> import re
>>> s = "<start>\nno_period\n<end>"
>>> print re.sub("<start>[^.]*<end>", "foo", s)
foo
はまた、それは最初<end>
タグをマッチ:
>>> import re
>>> s = "<start>\n<end>\none_period .\n<end>"
>>> print re.sub("<start>[^.]*<end>", "foo", s)
foo
one_period .
<end>
だから何がここで起こっているの?なぜ期間が[^.]*
のマッチングを停止するのですか?
EDIT:
は、私が誤っカラット^
は、新しいラインマッチングのためだったと思っ
を解決しました。私が必要としたのはre.DOTALLフラグ(Amberで示されている)でした。ここで私が今使っている表現です:
>>> import re
>>> s = "<start>\none_period .\n<end>"
>>> print re.sub("<start>.*<end>", "foo", s, flags=re.DOTALL)
foo
と一致しません。つまり、re.sub( "。* "、 "foo"、s) ')と一致しません。正しい代入式は何でしょうか? –
user749618
行間で '.'をマッチさせるには、' re.DOTALL'フラグを使う必要があります。 http://docs.python.org/library/re.html#re。DOTALL – Amber
're.sub("。* "、" foo "、s、flags = re.DOTALL)'作品!どうもありがとう。 –
user749618