8

次のツイート例があります。

RT @user1: who are @thing and @user2?

user1thinguser2だけが欲しいです。

これらの3つの名前を抽出するためにどの正規表現を使用できますか?

PS:ユーザー名には、文字、数字、アンダースコアのみを含める必要があります。

4

5 に答える 5

17

テスト済み:

/@([a-z0-9_]+)/i

Ruby(irb)の場合:

>> "RT @user1: who are @thing and @user2?".scan(/@([a-z0-9_]+)/i)
=> [["user1"], ["thing"], ["user2"]]

Pythonの場合:

>>> import re
>>> re.findall("@([a-z0-9_]+)", "RT @user1: who are @thing and @user2?", re.I)
['user1', 'thing', 'user2']

PHPの場合:

<?PHP
$matches = array();
preg_match_all(
    "/@([a-z0-9_]+)/i",
    "RT @user1: who are @thing and @user2?",
    $matches);

print_r($matches[1]);
?>

Array
(
    [0] => user1
    [1] => thing
    [2] => user2
)
于 2009-04-11T18:40:18.603 に答える
2

この正規表現でイテレータ(findall)を試してください:

(@[\w-]+)

さよなら

于 2009-04-12T10:23:44.077 に答える
2
/(?<!\w)@(\w+)/

上記は次のシナリオをカバーしていますが、このスレッドの他の回答はカバーしていません。

  • ユーザー名ではない@記号(例:「私のメールアドレスはtest@example.com」)
  • 文字列の先頭にあるユーザー名を引き続き許可します(例: "@ username lorem ipsum ...")。
于 2012-07-25T05:08:45.260 に答える
1

このテキストの問題を解決するには、プロジェクトにTwitterテキストライブラリ[1]を含めることをお勧めします。

twttr.txt.extractMentions("a very generic twitt with some @mention");

[1] https://github.com/twitter/twitter-text-js

于 2014-04-23T13:55:04.387 に答える
0

これでうまくいくはずです(便宜上、名前付きキャプチャを使用しました):

。+?@(?[a-zA-Z0-9 _] +):[^ @] +?@(?[^ \ s] +)[^ @] +?@(?[a-zA-Z0- 9 _] +)

于 2009-04-11T18:51:53.943 に答える