Python 使用不同的sep拆分字符串@一次

Python 使用不同的sep拆分字符串@一次,python,string,split,Python,String,Split,现在它只是在连字符处拆分,但是否可以在-'和:'处拆分此字符串?一个想法是这样的(未经测试): 或者这个,哪个更适合您的数据 years, months, days = the_string.split('-') days, time = days.split(' ') time = time.split(':') 我猜您也希望在中间的空间上拆分: date, time = the_string.split(' ') years, months, days = date.split('-')

现在它只是在连字符处拆分,但是否可以在-'和:'处拆分此字符串?

一个想法是这样的(未经测试):

或者这个,哪个更适合您的数据

years, months, days = the_string.split('-')
days, time = days.split(' ')
time = time.split(':')

我猜您也希望在中间的空间上拆分:

date, time = the_string.split(' ')
years, months, days = date.split('-')
hours, minute, seconds = time.split(":")

使用regexp,并使用模式匹配所需的格式

import re
values = re.split(r'[- :]', "1122-33-44 55:66:77")
print values
# Prints ['1122', '33', '44', '55', '66', '77']
更详细的选项“命名组”将字段名与值配对(for)

pat=“(?P\d{4})-(?P\d\d)-(?P\d\d)(?P\d\d):(?P\d\d):(?P\d\d):(?P\d\d) >>>m=重新匹配(帕特,'0000-00-00:00:00') >>>m.groupdict() {'hour':'00','min':'00','month':'00','sec':'00','year':'0000','day':'00'} >>>
也许您真正想要的是解析日期

>>> pat = "(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d) (?P<hour>\d\d):(?P<min>\d\d):(?P<sec>\d\d)"
>>> m = re.match(pat,'0000-00-00 00:00:00')
>>> m.groupdict()
{'hour': '00', 'min': '00', 'month': '00', 'sec': '00', 'year': '0000', 'day': '00'}
>>> 

…将“p”更改为“pat”。)另外,“\d{4}”在IMO中会更好,为了安全起见,使用r”而不是普通字符串。这肯定会更好,是的!可读性稍差,但meh!:)这是正确的,只是日期显然是无效的(我讨厌mysql)。@Dustin:那么为什么不使用
if
try
来过滤掉空的非日期呢?
>>> pat = r"(\d{4})-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)"
>>> m = re.match(pat,'0000-00-00 00:00:00')
>>> m.groups()
('0000', '00', '00', '00', '00', '00')
>>> 
>>> pat = "(?P<year>\d{4})-(?P<month>\d\d)-(?P<day>\d\d) (?P<hour>\d\d):(?P<min>\d\d):(?P<sec>\d\d)"
>>> m = re.match(pat,'0000-00-00 00:00:00')
>>> m.groupdict()
{'hour': '00', 'min': '00', 'month': '00', 'sec': '00', 'year': '0000', 'day': '00'}
>>> 
>>> from time import strptime
>>> strptime( '2000-01-01 00:00:00', '%Y-%m-%d %H:%M:%S') 
time.struct_time(tm_year=2000, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=1, tm_isdst=-1)
>>>