可能重复:
正则表达式匹配空格或字符串结尾
那么如果用户提交了一个包含@符号(@username)的文本框,我怎样才能有效地抓取@和下一个空格之间的用户名呢?
此外,一个提交中可能有多个@user,因此希望每个都附加到一个列表中,但前提是它不在列表中。
可能重复:
正则表达式匹配空格或字符串结尾
那么如果用户提交了一个包含@符号(@username)的文本框,我怎样才能有效地抓取@和下一个空格之间的用户名呢?
此外,一个提交中可能有多个@user,因此希望每个都附加到一个列表中,但前提是它不在列表中。
如果您要处理大量文本,则正则表达式是最简单的:
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")