1

たとえば、これは私の文字列です:

myString = "<html><body><p>Hello World!</p><p>Hello Dennis!</p></body></html>"

そして私が達成しようとしているのは:

myList = ['Hello World!','Hello Dennis!']

正規表現または別の方法を使用myStringして、達成するためにhtmlタグを無視しながら段落テキストを除外するにはどうすればよいmyListですか?

私が試してみました:

import re
a="<body><p>Hello world!</p><p>Hello Denniss!</p></body>"
result=re.search('<p>(.*)</p>', a)
print result.group(1)

その結果:Hello world!</p><p>Hello Denniss!そして私が試したとき、私は(.*)(.*)得ましたHello World!

この文字列は単なる例です。文字列は<garbage>abcdefghijk<gar<bage>、Web 開発者が Web サイトをどのようにコーディングしたかによっても異なる場合があります。

これは複雑な正規表現かもしれませんが、今年後半に参加するサイバー セキュリティ コンテストのため、これを学ぶ必要があります。私の最善の策は、 a>と a の間のテキストを検索するアルゴリズムを開発することだと思います<

これについてどうすればいいですか?

私の質問が適切にフォーマットされていない場合は申し訳ありませんが、学習上の問題が少しあります。

4

2 に答える 2

1

テキスト内のすべてのタグを削除しhtmlますか? 私は正規表現を選択しません。たとえば、他の方法BeautifulSoupを使用すると、そのハッキング会議ですべてが驚かれることでしょう。

from bs4 import BeautifulSoup

myString = "<html><body><p>Hello World!</p><p>Hello Dennis!</p></body></html>"

myList = list(BeautifulSoup(myString).strings))

次の結果が得られます。

['Hello World!', 'Hello Dennis!']
于 2013-09-12T11:53:54.413 に答える
1

正規表現を使用した HTML 解析は明らかに制限されていますが、HTML マイニングの実際のソリューションが必要な場合は、このアドオンBeautifulSoupを調べてみてください。

あなたの正規表現に関しては、asterisk量指定子は貪欲で、</p>. したがって、XXX が見つかるまで検索(?=XXX)するコマンドを使用する必要があります。

次のことを試してください。

re.findall(r'<p>(.*?)(?=</p>)', s)
于 2013-09-12T11:54:02.690 に答える