从字符串中提取一些字母并在Python中添加连字符



在文件名的最后部分附加日期的文件。这样的。

string = 'blablablabla_20210812.jpg'

我像这样提取数据。

string[-12:][:-4]

我想在年,月和日期之间添加'-'。我就是这样做的。

string[-12:][:-4][:4] + '-' + string[-12:][:-4][4:][:2] + '-' + string[-12:][:-4][6:]

在我看来,这似乎比读机器代码更复杂。你们能告诉我更实用的方法吗?

一个解决方案是使用正则表达式和re.sub:

import re
s = "blablablabla_20210812.jpg"
s = re.sub(r"_(d{4})(d{2})(d{2}).", r"_1-2-3.", s)
print(s)

打印:

blablablabla_2021-08-12.jpg

您也可以将加入组的值替换为lambda:

>>> import re
>>> string = 'blablablabla_20210812.jpg'
>>> re.sub('(d{4})(d{2})(d{2})', lambda m: '-'.join(g for g in m.groups()), string)
#output: 'blablablabla_2021-08-12.jpg'

您可以将两个索引放在一个正方形中并使用join函数:

'-'.join([string[-12:-8], string[-8:-6], string[-6:-4]])

另外,我个人更喜欢保持代码可读性。您可以先命名变量:

def extractDataInfo(string):
year, month, day = string[-12:-8], string[-8:-6], string[-6:-4]
return '-'.join([year, month, day])

您可以压缩string[-12:][:-4][:4]string[-12:-8],使其看起来更干净。代码看起来像这样:

string = 'blablablabla_20210812.jpg'
print(string[-12:-8] + '-' + string[-8:-6]+ '-' + string[-6:-4])
# 2021-08-12

或者如果你想要文本:

print(string[:-8] + '-' + string[-8:-6]+ '-' + string[-6:-4])
# blablablabla_2021-08-12

只有当你知道文件总是以:

结尾时,这个问题的一个简单的解决方案才有效。
_data.extension

如果是,解决方案将是:

string = 'blablablabla_20210812.jpg'
s = string.replace("_", ".")
s = s.split(".")
data = s[1]
s[1] = data[:4] + "-" + data[4:6] + "-" + data[6:]
print(s[1]) # OUTPUT: 2021-08-12
# Taking all together:
print(s[0] + "_" + s[1] + "." + s[2])  # OUTPUT: blablablabla_2021-08-12.jpg

您也可以这样尝试:

import datetime 
print(datetime.datetime.strptime(string[-12:-4],'%Y%m%d').strftime('%Y-%m-%d'))

输出:

'2021-08-12'

最新更新