0

私はこのようなテキストのブロックを持っています:

Hello @Simon, I had a great day today. #StackOverflow

私はそれを次のように取り除くための最もエレガントな解決策を見つけたいと思います:

Hello, I had a great day today.

つまり、接頭辞#と@を持つすべての単語を削除したいと思います。(はい、ツイートを調べています)

私はPythonを初めて使用します。これを単一の単語で実行しても問題ありませんが、複数の単語を含む文字列でこれを実現する最善の方法がわかりません。

私の最初の考えはreplaceを使用することですが、それは実際の@記号と#記号を取り除くだけです。 プレフィックスが#または@である単語を削除するための最良の方法を探しています。

-編集-これが答えを無効にするかどうかはわかりませんが、受け入れるためには、複数の単語に#または$のプレフィックスが含まれている場所も削除する必要があります。例:こんにちは#hiya #ello

4

3 に答える 3

4

正規表現を使用できます:

>>> import re
>>> s = 'Hello @Simon, I had a great day today. #StackOverflow'
>>> re.sub(r'(?:^|\s)[@#].*?(?=[,;:.!?]|\s|$)', r'', s)
'Hello, I had a great day today.'
于 2012-11-12T22:48:22.293 に答える
1

匿名関数を記述してフィルターステートメントに入れるのと同じくらい簡単です

' '.join(filter(lambda x: x[0] not in ['@','#'], tweet.split()))

これにより、@ usersまたは#topicsのコンマが失われますが、ツイートを処理しているだけの場合は、おそらく見逃すことはありません。

于 2012-11-12T22:47:14.700 に答える
0
' '.join([w for w in s.split() if len(w)>1 and w[0] not in ['@','#']])

sあなたのツイートはどこにありますか。

于 2012-11-12T22:49:25.563 に答える