2

申し訳ありませんが、別のPython初心者の質問です。私は文字列を持っています:

my_string = "<p>this is some \n fun</p>And this is \n some more fun!"

をお願いします:

my_string = "<p>this is some fun</p>And this is \n some more fun!"

つまり、 htmlタグ内で発生した場合にのみ'\ n'を削除するにはどうすればよいですか?

私は持っています:

my_string = re.sub('<(.*?)>(.*?)\n(.*?)</(.*?)>', 'replace with what???', my_string)

これは明らかに機能しませんが、私は立ち往生しています。

4

2 に答える 2

5

正規表現はHTMLには適していません。しないでください。XHTML自己完結型タグを除く正規表​​現一致オープンタグを参照してください。

代わりに、HTMLパーサーを使用してください。Pythonにはhtml.parserが付属していますが、 BeautifulSoupまたはhtml5libを使用することもできます。その後、あなたがしなければならないのは、木を歩き、改行を取り除くことです。

于 2013-01-27T17:58:49.260 に答える
2

BeautifulSoup(bs4)を使用してみてください。これにより、XMLタグとページを解析できるようになります。

>>> import bs4
>>> my_string = "<p>this is some \n fun</p>And this is \n some more fun!"
>>> soup = bs4.BeautifulSoup(my_string)
>>> p = soup.p.contents[0].replace('\n ','')
>>> print p

これにより、pタグの新しい行が引き出されます。コンテンツに複数のタグがある場合はNone、forループと同様に使用して、子を収集できます(tag.childプロパティを使用)。

例えば:

>>> tags = soup.find_all(None)
>>> for tag in tags:
...    if tag.child is None:
...        tag.child.contents[0].replace('\n ', '')
...    else:
...        tag.contents[0].replace('\n ', '')

これは(Webページが異なる可能性があるため)希望どおりに機能しない可能性がありますが、このコードは必要に応じて複製できます。

于 2013-01-27T18:18:33.460 に答える