0

@タグまたは#タグでツイートをフィルタリングするクエリを作成しようとしています。

したがって、@ Obamaまたは#Obamaのいずれかの結果が必要ですが、Obamaは必要ありません。これは私がこれまでに持っているものです:

re.compile(r'\b(?:#|@|)*%s*\b' % re.escape(obama), re.IGNORECASE)

返信ありがとうございます....私は両方の答えを試しますが、私の状況でうまくいくようです:

 re.compile(r'\b[#@]*%s\b' % re.escape(term), re.IGNORECASE)  

'term'は、繰り返し処理するリスト内の要素です。これにより、「term」の前に#または@が付加されたツイートが返されます。'*'を使用せずに試行しましたが、例外を出していました。

ありがとう

4

2 に答える 2

1

これが純粋に正規表現と関係があり、Twitter自体とは関係がない場合(ツイートをフィルタリングしているという事実を除いて)、必要な正規表現は次のとおりです。

compiled = re.compile(r'\b[#@]obama\b', re.IGNORECASE)

実行しているのと同様のことを実行するコードの例が必要な場合は、これを見てください。これは価値のある例である可能性があります。

https://github.com/kgaughan/is-on-a-train/blob/master/isonatrain.py

そのコードは、特定のトリガーフレーズを探して多数のユーザーを追跡し、ユーザーの発言に基づいてHTMLファイルを書き出します。

于 2012-11-22T17:26:39.507 に答える
1

この正規表現を使用してみてください。

r'\b[#@]{name}\b'.format(name=re.escape('Obama'))

文字クラス[%@]は、選択グループよりも高速に動作します(?:#|@)

したがって、単語の境界から始めて、または\bに続きます。次に、変数から置換します。次に、末尾の境界に移動します。#@obama

質問*では、前の式を0から無限大まで繰り返す数量詞を使用しました。シンボルを繰り返す理由はありません#@また、の最後のsybmolobamaも繰り返さないでください。

于 2012-11-22T17:21:01.190 に答える