0

REモジュールを使用してタグ内の単語を除くすべての単語を検索するにはどうすればよいですか?

私は何かを見つける方法を知っていますが、それを反対の方法で行う方法はありますか?検索するものを書くように、実際には、タグ内のすべてとタグ自体を除くすべての単語を検索したいですか?

これまでのところ、私はこれを管理しました:

f = open (filename,'r')
data = re.findall(r"<.+?>", f.read())

タグ内のすべてを印刷します<>が、それらのタグ内の単語を除くすべての単語を検索するようにするにはどうすればよいですか?^内部のパターンの先頭で使用しようとしました[]が、その後、記号.は文字通り特別な意味を持たずに扱われます。また、文字列を分割し、を使用して'''\= <>"'''、文字列全体でタグ内の単語<>(align、right、tdなど)をチェックし、<>タグ内にない単語を別のリストに追加することで、これを解決することができました。しかし、それは少し醜い解決策です。

<>中にあるものとこれらのタグ自体を除いて、すべての単語を検索する簡単な方法はありますか?したがって、文字列'hello 123 <b>Bold</b> <p>end</p>'re.findall、とすると、次のようになります。

['hello', '123', 'Bold', 'end']
4

4 に答える 4

2

この種のタスクに正規表現を使用することは、すべての場合に機能させることができないため、最善のアイデアではありません。

そのような単語のほとんどをキャッチする必要があるソリューションの1つは、正規表現パターンです。

\b\w+\b(?![^<]*>)
于 2012-10-29T12:10:25.190 に答える
2

正規表現の使用を避けたい場合は、 BeautifulSoupを使用すると、HTMLドキュメントからテキストだけを簡単に取得できます。

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup(html_string)
text = "".join(soup.findAll(text=True))

そこから、次の単語のリストを取得できますsplit

words = text.split()
于 2012-10-29T12:12:40.147 に答える
1

のようなものre.compile(r'<[^>]+>').sub('', string).split()がトリックを行う必要があります。

正規表現を使用した文脈自由言語の処理に関するこの投稿を読むことをお勧めします。

于 2012-10-29T12:04:25.597 に答える
0

(元の正規表現を使用して)すべてのタグを取り除き、単語を一致させます。

唯一の弱点は<、タグ区切り文字以外の文字列にsが含まれている場合、またはHTMLが適切に形成されていない場合です。その場合は、HTMLパーサーを使用することをお勧めします。

于 2012-10-29T12:07:29.670 に答える