在特定字符后提取文本

时间:2015-04-24 00:44:45

标签: python python-2.7

我需要在@

之后提取单词

我该怎么做?我在想什么:

text="Hello there @bob !"
user=text[text.find("@")+1:]
print user

输出:

bob !

但正确的输出应该是:

bob

2 个答案:

答案 0 :(得分:10)

有趣的正则表达式解决方案:

>>> import re
>>> re.findall(r'@(\w+)', '@Hello there @bob @!')
['Hello', 'bob']
>>> re.findall(r'@(\w+)', 'Hello there bob !')
[]
>>> (re.findall(r'@(\w+)', 'Hello there @bob !') or None,)[0]
'bob'
>>> print (re.findall(r'@(\w+)', 'Hello there bob !') or None,)[0]
None

上面的正则表达式将在' @'之后选取一个或多个字母数字字符的模式。字符,直到找到非字母数字字符。

如果您想捕获更广泛的子字符串,这里有一个匹配一个或多个非空格字符的正则表达式解决方案:

>>> re.findall(r'@(\S+?)', '@Hello there @bob @!')
['Hello', 'bob', '!']

请注意,当上述正则表达式遇到类似@xyz@abc的字符串时,它会在一个结果中捕获xyz@abc,而不是xyzabc。要解决此问题,您可以使用否定的\s字符类,同时否定@个字符:

>>> re.findall(r'@([^\s@]+)', '@xyz@abc some other stuff')
['xyz', 'abc']

这是一个正则表达式解决方案,只有在您不想要任何数字或其他任何内容时,才能匹配一个或多个字母字符:

>>> re.findall(r'@([A-Za-z]+)', '@Hello there @bobv2.0 @!')
['Hello', 'bobv']

答案 1 :(得分:6)

所以你想要在@之后开始一个空格?

user=text[text.find("@")+1:].split()[0]
print(user)
bob

编辑:@bgstech注意,如果字符串没有" @",请在之前进行检查:

if "@" in text:
    user=text[text.find("@")+1:].split()[0]
else:
    user="something_else_appropriate"