-2

可能重复:
正则表达式匹配空格或字符串结尾

那么如果用户提交了一个包含@符号(@username)的文本框,我怎样才能有效地抓取@和下一个空格之间的用户名呢?

此外,一个提交中可能有多个@user,因此希望每个都附加到一个列表中,但前提是它不在列表中。

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 回答