Python分割字符串

13
假设我们有一个电子邮件地址Zaptoit:685158:zaptoit@hotmail.com,如何分割它只留下685158:zaptoit@hotmail.com
答案:
7个回答

13
>>> s = 'Zaptoit:685158:zaptoit@hotmail.com'
>>> s.split( ':', 1 )[1]
'685158:zaptoit@hotmail.com'

2
请注意,使用变量名“str”并不是一个好的编程习惯,因为str()是一个内置函数。 - Jay

5
另一种解决方案:
s = 'Zaptoit:685158:zaptoit@hotmail.com'
s.split(':', 1)[1]

5

另一种方法,无需使用split:

s = 'Zaptoit:685158:zaptoit@hotmail.com'
s[s.find(':')+1:]

例:

>>> s = 'Zaptoit:685158:zaptoit@hotmail.com'
>>> s[s.find(':')+1:]
'685158:zaptoit@hotmail.com'

3
自Python 2.5起,有了更直接的解决方案。如果未找到分隔符,则它会逐渐降级:
>>> s = 'Zaptoit:685158:zaptoit@hotmail.com'
>>> s.partition(':')
('Zaptoit', ':', '685158:zaptoit@hotmail.com')

>>> s.partition(':')[2]
'685158:zaptoit@hotmail.com'

>>> s.partition(';')
('Zaptoit:685158:zaptoit@hotmail.com', '', '')

这正是我正在寻找的。我知道 split(),但之前没有遇到过 partition()。谢谢! - Nick K9

1
以下代码将字符串分割,忽略第一个元素并重新组合其余部分:
":".join(x.split(":")[1:])

输出:

'685158:zaptoit@hotmail.com'

0
使用方法str.split(),并将maxsplit参数的值设为1。
mailID = 'Zaptoit:685158:zaptoit@hotmail.com' 
mailID.split(':', 1)[1]

希望它有所帮助。


0
s = re.sub('^.*?:', '', s)

@PEZ:最好在第一个“:”停止匹配,而不是最后一个。 - orip
@orip:我认为你错了——问号使它成为一个非贪婪匹配,会在第一个冒号处停止,就像预期的那样。 - Arkady
是的,我想Nick的意思是其他的。 - PEZ
对我来说,这是关于清晰度的问题。越清晰越好。在这种情况下,.*?: 是非常可预测和清晰的。"直到第一个冒号之前的所有内容"比"不是冒号的所有内容直到第一个冒号"更清晰。 - PEZ
1
抱歉,忘记在for循环外编译正则表达式。这样做时,否定字符类版本的时间减少了34%。我还尝试使用cython编译代码,静态声明int和double(应该减少开销)。然后时间减少了40%,因此否定字符类显然更快。 - Samuel Lampa
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接