2012-09-12 15 views
7

私の正規表現は私の文字列に何もしません。Pythonの正規表現は何でも一致します

パイソン

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 

は私が

<article stuff 
</article> 
+2

Aw、c'mon:[Cthulhu Parsing](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454)もう一度。 – pillmuncher

+0

@pillmuncher:それは私に間違ったHTMLのように見えるので、HTMLパーサーは非常に簡単に作業できるとは思っていません。 – Blender

+0

@Blender:私はあなたが正しいと思います。しかし、置換は有効なXMLではないようです。私は、壊れたXMLは何のために必要なのでしょうか? – pillmuncher

答えて

10

re.MULTILINEが実際にあなたがそれを可能にする方法であなたの正規表現の複数行を作成しませんしたい

random 
<article stuff 
</article>random stuff 

を取得します。

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

re.DOTALLはありません:

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

変更flags=re.DOTALLflags=re.MULTILINEとあなたの正規表現は動作します。

+0

素晴らしい、正しいとマークします:)ありがとう! – user1442957

+0

保存しました。ありがとう – silviomoreto

関連する問題