9

私の正規表現は私の文字列に対して何もしていません。

パイソン

data = 'random\n<article stuff\n</article>random stuff'
datareg = re.sub(r'.*<article(.*)</article>.*', r'<article\1</article>', data, flags=re.MULTILINE)
print datareg

私は得る

random
<article stuff
</article>random stuff

私が欲しい

<article stuff
</article>
4

1 に答える 1

12

re.MULTILINE実際には、正規表現を希望どおりに複数行にするわけではありません。

指定すると、パターン文字'^'は文字列の先頭と各行の先頭 (各改行の直後) で一致します。パターン文字'$'は、文字列の末尾と各行の末尾 (各改行の直前) で一致します。デフォルトでは、文字列の先頭、文字列の末尾、および文字列の末尾の改行 (存在する場合) の直前'^'のみに一致します。'$'

re.DOTALLする:

特殊'.'文字を、改行を含むすべての文字と一致させます。このフラグがない場合、改行以外'.'のすべてに一致します。

に変更flags=re.MULTILINEするflags=re.DOTALLと、正規表現が機能します。

于 2012-09-12T22:25:20.393 に答える