如何更改字符串序列? 对于例如
mys='4002-10-21'
预期结果:
'4002-21-10'
我尝试过:
我可以枚举分割的字符串,然后像1-3-2
那样重新排列序列newlist=list()
for i, v in enumerate(mys.split('-')):
newlist.append(v)
答案 0 :(得分:9)
如果您真的想重新格式化日期时间字符串,我建议您将字符串解析为日期时间对象并根据需要对其进行格式化:
import datetime
def rearrange(*args):
return [datetime.datetime.strptime(arg, '%Y-%m-%d').strftime('%Y-%d-%m') for arg in args]
>>> rearrange('4002-10-21', '4002-10-28')
['4002-21-10', '4002-28-10']
答案 1 :(得分:7)
使用operator.itemgetter
,您只需拨打一个电话即可获得多个项目:
>>> from operator import itemgetter
>>> '-'.join(itemgetter(0,2,1)(mys.split('-')))
'4002-21-10'
使用string format ,您可以从参数中选择值:
>>> "{0}-{2}-{1}".format(*mys.split('-'))
'4002-21-10'
使用re.sub
,您可以捕获组并重新排序(假设数字):
>>> import re
>>> re.sub(r'(\d+)-(\d+)-(\d+)', r'\1-\3-\2', mys)
'4002-21-10'
如果您在pandas中需要此内容(如评论中所示),您可以在DataFrame.replace
和Series.str.replace
中使用基于正则表达式的方法,例如(添加inplace=True
} for in-place subs):
>>> import pandas as pd
>>> df = pd.DataFrame({'dates': ['4002-10-21']})
>>> df.dates.replace(r'(\d+)-(\d+)-(\d+)', r'\1-\3-\2', regex=True)
0 4002-21-10
Name: dates, dtype: object
答案 2 :(得分:3)
鉴于问题的背景,你的方法很好:
mys = '4002-10-21'
parts = mys.split('-')
mys = parts[0] + '-' + parts[2] + '-' + parts[1]
print(mys) # "4002-21-10"
它确实很脆弱,但如果是个人或一次性剧本,谁在乎呢?如果您需要更多的灵活性,那么您需要更明确地描述约束的性质。
答案 3 :(得分:3)
假设:
mys='4002-10-21'
你可以简单地为它编写一个函数,如:
def change_order(string, split_char, *args):
string = string.split(split_char)
new_list = []
for i in args:
try:
new_list.append(string[i]) # change to i-1 for abstracted parameters
except IndexError:
return False
return split_char.join(new_list)
给'4002-10-21'
一个1, 3, 2
(实际代码需要1,因为它的零索引)重新排序给出了:
>>> test.change_order('4002-10-21', '-', 0, 2, 1)
'4002-21-10'
答案 4 :(得分:3)
一种好的方法是使用正则表达式,这样我猜想的数字可以有不同的长度,例如:'4002-21-1'
也可以正常工作。
import re
mys = '4002-21-10'
parts = re.findall('[\d]+', mys) # finds all numbers that are next to each other
print(parts) # just so you see what is created
formatted_mys = parts[0] + "-" + parts[2] + "-" + parts[1] # put the parts together in the way you wanted
如果您愿意,可以删除print
行。还有很多其他方法可以做你想要的,但如果你需要灵活,这就是我的建议。
答案 5 :(得分:2)
您可以在-
上拆分,然后重新加入-
作为分隔符,但只需根据需要重新订购:
>>> s = '4002-10-21'
>>> d = s.split('-')
>>> new_s = "-".join((d[0], d[2], d[1]))
'4002-21-10'
或者,在没有join
之后,您可以简单地执行以下操作:
new_s = "{}-{}-{}".format(d[0], d[2], d[1])
答案 6 :(得分:2)
你可以试试这个:
mys='4002-10-21'
m = mys.split("-")
new_mys = m[0]+"-"+'-'.join(m[1:][::-1])
输出:
'4002-21-10'
答案 7 :(得分:2)
L='4002-10-21'
L=L.split("-")
L[i:3] = L[2:0:-1]
"-".join(L)
你可以使用切片。