2

すべてのdivを削除しようとしています。

入力:

<p>111</p>

<div class="1334">bla</div>

<p>333</p>

<p>333</p>

<div some unkown stuff>bla2</div>

望ましい出力:

   <p>111</p>

    <p>333</p>

    <p>333</p>

私はこれを試しましたが、うまくいきません:

release_content = re.sub("/<div>.*<\/div>/s", "", release_content)
4

3 に答える 3

8

この問題には正規表現を使用しないでください。html パーサーを使用します。BeautifulSoupを使用したpythonのソリューションは次のとおりです。

from BeautifulSoup import BeautifulSoup

with open('Path/to/file', 'r') as content_file:
    content = content_file.read()

soup = BeautifulSoup(content)
[div.extract() for div in soup.findAll('div')]

with open('Path/to/file.modified', 'w') as output_file:
    output_file.write(str(soup))
于 2013-04-03T20:18:34.623 に答える
2

Python の正規表現パターンに区切り記号は必要ありません。

release_content = re.sub("<div>.*<\/div>", "", release_content)

divs には属性がありませんか? ネストされたdivs はどうなりますか?

于 2013-04-03T20:06:03.207 に答える
2

貪欲な演算子を使用しています: *. 停止する前に、可能な限り一致させようとします。貪欲でないバージョンを使用してみることができます*?。ネストされた<div>タグがない限り、問題ありません。

release_content = re.sub("(?s)<div>.*?<\/div>", "", release_content)

タグをネストできる場合は、 BeautifulSoup<div>などの HTML ライブラリを使用することをお勧めします。

編集ごとに、属性を説明するため<div>に、パターンの先頭を単純に修正できます。

release_content = re.sub("(?s)<div(?: [^>]*)?>.*?<\/div>", "", release_content)
于 2013-04-03T20:06:25.710 に答える