Извлечь текст после определенного символа
мне нужно извлечь слово после @
как я могу это сделать? Я:
text="Hello there @bob !"
user=text[text.find("@")+1:]
print user
выход:
bob !
но правильный вывод должен быть:
bob
2 ответов
решение regex для удовольствия:
>>> 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
регулярное выражение выше подберет шаблоны одного или нескольких буквенно-цифровых символов, следующих за символом"@", пока не будет найден не буквенно-цифровой символ.
вот решение regex для соответствия одному или нескольким символам без пробелов, если вы хотите захватить более широкий диапазон подстрок:
>>> re.findall(r'@(\S+?)', '@Hello there @bob @!')
['Hello', 'bob', '!']
обратите внимание, что когда приведенное выше регулярное выражение встречает строку типа @xyz@abc
он будет захватывать xyz@abc
в результате вместо xyz
и abc
отдельно. Чтобы исправить это, вы можете использовать отрицается \s
класс символов, а также отрицание @
символы:
>>> re.findall(r'@([^\s@]+)', '@xyz@abc some other stuff')
['xyz', 'abc']
и вот решение regex, чтобы соответствовать одному или нескольким символам алфавита только в случае, если вы не хотите никаких чисел или чего-либо еще:
>>> re.findall(r'@([A-Za-z]+)', '@Hello there @bobv2.0 @!')
['Hello', 'bobv']
Итак, вы хотите, чтобы слово начиналось После @ До пробела?
user=text[text.find("@")+1:].split()[0]
print(user)
bob
EDIT: как @ bgstech примечание, в случаях, когда строка не имеет"@", сделайте проверку перед:
if "@" in text:
user=text[text.find("@")+1:].split()[0]
else:
user="something_else_appropriate"