1

サンプル テキスト:文字列-> rev タグ内のコンテンツ (lxml 経由)。

テキスト内の {{BLOCKS}} を削除しようとしています。

次の正規表現を使用して、単純な 1 行のブロックを削除しました。

p = re.compile('\{\{*.*\}\}')
nonBracketedString = p.sub('', bracketedString)

ただし、これは、コンテンツの先頭にある最初の複数行の括弧で囲まれたセクションを削除しません。複数行の中かっこで囲まれたブロックを削除するにはどうすればよいですか?


編集:

回答からの解決策:

p = re.compile('\{\{*?.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
4

3 に答える 3

2

dotallフラグを設定します。

p = re.compile('\{\{*.*?\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)

デフォルトモードでは.、改行を除くすべての文字に一致します。DOTALLフラグが指定されている場合、これは改行を含むすべての文字に一致します。

http://docs.python.org/library/re.html

また、角かっこの間で貪欲でない一致が必要になります。.*?

于 2009-12-24T06:22:01.857 に答える
1

dotallフラグを設定します-これにより、が許可されます。改行に一致します。

p = re.compile('\{\{*.*\}\}', re.DOTALL)
nonBracketedString = p.sub('', bracketedString)
于 2009-12-24T06:19:55.833 に答える
1
>>> import urllib2
>>> import re
>>> s = "".join(urllib2.urlopen('http://en.wikipedia.org/w/api.php?action=query&prop=revisions&titles=Italian%20War%20of%201542-1546&redirects&rvprop=content&format=xml').readlines())
>>> p = re.compile('\{\{.*?\}\}', re.DOTALL)
>>> re.sub(p, '', s)
'<?xml version="1.0"?><api><query><redirects><r from="Italian War of 1542-1546" to="Italian War of 1542\xe2\x80\x931546" /></redirects><pages><page pageid="3719774" ns="0" title="Italian War of 1542\xe2\x80\x931546"><revisions><rev xml:space="preserve">\n\n\n\nThe \'\'\'Italian War of 1542\xe2\x80\x9346\'\'\' was a conflict late in the [[Italian Wars]], ...

ここでは出力を切り捨てましたが、機能していることを確認するには十分です。

于 2009-12-24T17:48:13.747 に答える