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)
>>>