Разделенная строка Python

Допустим, у нас есть Zaptoit:685158:[email protected]

Как вы разделитесь, чтобы оставалось только 685158:[email protected]

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
13
0
11 585
7

Ответы 7

Другое решение:

s = 'Zaptoit:685158:[email protected]'
s.split(':', 1)[1]
>>> s = 'Zaptoit:685158:[email protected]'
>>> s.split( ':', 1 )[1]
'685158:[email protected]'

Обратите внимание, что использование имени переменной «str» не очень хорошая практика, поскольку str () является встроенной функцией.

Jay 13.01.2009 01:31
s = re.sub('^.*?:', '', s)

@PEZ: лучше останавливать матч на первом ':' вместо последнего

orip 13.01.2009 02:22

@orip: я думаю, вы ошибаетесь - вопросительный знак делает его нежадным совпадением, которое, как и предполагалось, остановится на первом двоеточии

Arkady 13.01.2009 07:12

Да, я думаю, Ник имеет в виду другое.

PEZ 13.01.2009 15:46

В данном случае это не имеет значения, но в целом, если у вас есть выбор между отрицательным символьным классом и неохотным квантификатором (например, '. *?'), Символьный класс имеет тенденцию быть более быстрым, менее ресурсоемким и главное более предсказуемо.

Alan Moore 13.01.2009 18:46

Для меня это ясность. Чем яснее, тем лучше. В этом случае. * ?: совершенно предсказуемо и очень ясно. «Все до первого двоеточия» яснее, чем «Все, кроме двоеточия до первого двоеточия».

PEZ 13.01.2009 19:16

Из любопытства я протестировал прирост производительности от использования отрицательного класса символов по сравнению с нежадным символом и подумал, что результаты могут быть интересны и для других: выполнив указанные выше операции 1000000 раз в цикле, 3 раза и усреднив в результате я довольно стабильно получаю сокращение времени выполнения для инвертированного класса символов на 13%.

Samuel Lampa 28.12.2010 13:28

Извините, забыл скомпилировать регулярные выражения вне цикла for. При этом версия инвертированного класса символов занимает на 34% меньше времени. Я также попытался скомпилировать код с помощью cython, статически объявив int: s и double: s (что должно уменьшить накладные расходы). Затем время сокращается на 40%, поэтому отрицаемый класс персонажа явно быстрее.

Samuel Lampa 28.12.2010 14:47

Другой метод, без использования split:

s = 'Zaptoit:685158:[email protected]'
s[s.find(':')+1:]

Бывший:

>>> s = 'Zaptoit:685158:[email protected]'
>>> s[s.find(':')+1:]
'685158:[email protected]'

Начиная с Python 2.5 есть еще более прямое решение. Он хорошо деградирует, если разделитель не найден:

>>> s = 'Zaptoit:685158:[email protected]'
>>> s.partition(':')
('Zaptoit', ':', '685158:[email protected]')

>>> s.partition(':')[2]
'685158:[email protected]'

>>> s.partition(';')
('Zaptoit:685158:[email protected]', '', '')

Это именно то, что я искал. Я знал о split(), но раньше не сталкивался с partition(). Спасибо!

Nick K9 02.04.2017 16:30

Используйте метод str.split () со значением аргумента maxsplit равным 1.

mailID = 'Zaptoit:685158:[email protected]' 
mailID.split(':', 1)[1]

Надеюсь, это помогло.

Следующее разделяет строку, игнорирует первый элемент и присоединяется к остальным:

":".join(x.split(":")[1:])

Выход:

'685158:[email protected]'

Другие вопросы по теме