重複の可能性:
空白または文字列の末尾に一致する正規表現
ユーザーが @ 記号 (@username) を含むテキスト ボックスを送信した場合、@ と次のスペースの間のユーザー名を効率的に取得するにはどうすればよいでしょうか?
また、1 つの送信に複数の @users が存在する可能性があるため、それぞれをリストに追加する必要がありますが、リストにまだ含まれていない場合に限ります。
重複の可能性:
空白または文字列の末尾に一致する正規表現
ユーザーが @ 記号 (@username) を含むテキスト ボックスを送信した場合、@ と次のスペースの間のユーザー名を効率的に取得するにはどうすればよいでしょうか?
また、1 つの送信に複数の @users が存在する可能性があるため、それぞれをリストに追加する必要がありますが、リストにまだ含まれていない場合に限ります。
大量のテキストに対して実行している場合は、正規表現が最も簡単です。
import re
mystring = " Hello there @ben, my name is @bob"
re.findall(r'@(\w+)', mystring)
// ['ben', 'bob']
解決策なし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']
何に関して効率的ですか?コーディング時間?正規表現を試してください:
import re
re.findall(r'@([^\s]*)',"this is @astring with @another one")