2010-07-27 5 views
2

Любой способ извлечь то, что после @ (если есть), и до следующего . (если есть)?Извлеките определенную часть строки подключения

Примеры:

host 
host.domain.com 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

Мне нужно получить host в переменной.

Предложения в Python? Любой метод приветствуется.

Спасибо,

EDIT: Я установил мой вопрос. Нужно совместить host и host.blah.blah.

ответ

1
>>> x = "[email protected]" 
>>> x.split("@")[1].split(".")[0] 
'host' 
>>> y = "[email protected]" 
>>> y.split("@")[1].split(".")[0] 
'host' 
>>> 

Будет проигнорировано исключение IndexError, если в строке нет @.

1

Вы можете использовать несколько звонков string.split, первый из которых использует '@' в качестве разделителя, а второй - '.'

+0

+1 Я думаю, что это действительно лучший способ. Ни решения регулярных выражений, которые заданы в строке matche без @. – Toto

1
host = re.search(r"@(\w+)(\.|$)", s).group(1) 
+0

Не похоже, что это сработает, если нет '.' После '@' –

+0

@John Вы правы - исправили его. – Amarghosh

+0

Ницца. Я добавил '' 'после' @ 'в случае, если нет' @ ' – user14314

0

Вот еще одно решение:

re.search("^.*@([^.]*).*", str).group(1) 

редактировать: гораздо лучшее решение, благодаря комментарий:

re.search("@([^.]*)[.]?", str).group(1) 
+0

(1) 're.search ("^. * X") 'функционально эквивалентен' re.search («X») '[кроме наличия новых строк] и (как реализовано) ужасно медленнее, если X не найден. (2) Конечный '. *' (Соответствует 0 или более любому символу [кроме новой строки]) совершенно бессмыслен. –

+0

Спасибо за комментарий. Это великие вещи, которые нужно знать. – Klark

+0

Любой обратный шаблон, который может совпадать с 0 символами, совершенно бессмыслен, будь то '. *' Или '[.]?' Или что-то еще - вы не хотите, чтобы он соответствовал, поэтому не помещайте его. –