-2

重複の可能性:
空白または文字列の末尾に一致する正規表現

ユーザーが @ 記号 (@username) を含むテキスト ボックスを送信した場合、@ と次のスペースの間のユーザー名を効率的に取得するにはどうすればよいでしょうか?

また、1 つの送信に複数の @users が存在する可能性があるため、それぞれをリストに追加する必要がありますが、リストにまだ含まれていない場合に限ります。

4

3 に答える 3

1

大量のテキストに対して実行している場合は、正規表現が最も簡単です。

import re
mystring = " Hello there @ben, my name is @bob"
re.findall(r'@(\w+)', mystring)

// ['ben', 'bob']
于 2012-08-27T18:44:49.023 に答える
1

解決策なしregex:

>>> strs="@user some text @user2"
>>> [x.split()[0] for x in strs.split('@')[1:] if x.strip()!='']
['user', 'user2']

>>> strs1="hello I am @user1 and he's @user2"
>>> [x.split()[0] for x in strs1.split('@')[1:] if x.strip()!='']
['user1', 'user2']

編集:

lis=[]
strs="hello I am @user1 and he's @user2,  as per @user3, @user2 is older than @user1"
for x in strs.split('@')[1:]:
    x=x.split()[0].strip().strip(',";.')   #strip punctuation marks
    if x not in lis:        #if not in lis
        lis.append(x)

print lis   

出力:

['user1', 'user2', 'user3']
于 2012-08-27T18:47:13.820 に答える
0

何に関して効率的ですか?コーディング時間?正規表現を試してください:

import re
re.findall(r'@([^\s]*)',"this is @astring with @another one")
于 2012-08-27T18:43:31.513 に答える