Python 拆分/标识字符串末尾的数字,该数字不';我没有固定数量的字符
我有一组文件,在我想重命名的文件夹中。格式为:Python 拆分/标识字符串末尾的数字,该数字不';我没有固定数量的字符,python,python-3.x,Python,Python 3.x,我有一组文件,在我想重命名的文件夹中。格式为: lesson1 lesson2 ..... lesson11 lesson99 lesson100 lesson130 在Windows中排序时,顺序是我的字符串,因此不正确(示例): 我想成为(重命名): 如何捕捉/拆分字符串“lesson”末尾的编号部分 还有一个更复杂的情况,即字符串不固定(如第一课所示): 对于固定字符串,可以使用split方法: Number = "lesson123".split("lesson")[1] # "
lesson1
lesson2
.....
lesson11
lesson99
lesson100
lesson130
在Windows中排序时,顺序是我的字符串,因此不正确(示例):
我想成为(重命名):
如何捕捉/拆分字符串“lesson”末尾的编号部分
还有一个更复杂的情况,即字符串不固定(如第一课所示):
对于固定字符串,可以使用
split
方法:
Number = "lesson123".split("lesson")[1] # "123"
Title = "lesson123".split(Number)[0] # "lesson"
对于\u 001\u课程
您可以编写类似的内容,假设您需要在数字前面多加N个零
New_name = "_" + N*"0" + "%d_%s" %(Number, Title)
对于你的另一个例子,我知道你想抓住“title”之后的所有字符
如果您对这些多余的空格感到恼火,可以使用strip
或replace
删除它们:
Clean_number = Number.strip(" ")
# or
Clean_number = Number.replace(" ", "")
对于固定字符串,可以使用
split
方法:
Number = "lesson123".split("lesson")[1] # "123"
Title = "lesson123".split(Number)[0] # "lesson"
对于\u 001\u课程
您可以编写类似的内容,假设您需要在数字前面多加N个零
New_name = "_" + N*"0" + "%d_%s" %(Number, Title)
对于你的另一个例子,我知道你想抓住“title”之后的所有字符
如果您对这些多余的空格感到恼火,可以使用strip
或replace
删除它们:
Clean_number = Number.strip(" ")
# or
Clean_number = Number.replace(" ", "")
我建议如下,使用
重新导入
def重命名(旧名称):
#运行正则表达式以查找结束编号
匹配=重新搜索('lesson(\d+),旧名称)
#如果这是一个匹配(这应该是必要的,但是
#检查输入始终是一个好主意)
如果匹配:
#检索id并将其转换为整数
id=int(匹配组(1))
#获取格式化的名称
返回“{:03d}{U lesson.”格式(id)
一无所获
这是相当模块化的。下次要解析类似的文件名时,可以更改正则表达式:)。我建议使用
重新导入
def重命名(旧名称):
#运行正则表达式以查找结束编号
匹配=重新搜索('lesson(\d+),旧名称)
#如果这是一个匹配(这应该是必要的,但是
#检查输入始终是一个好主意)
如果匹配:
#检索id并将其转换为整数
id=int(匹配组(1))
#获取格式化的名称
返回“{:03d}{U lesson.”格式(id)
一无所获
这是相当模块化的。下次要解析类似的文件名时,可以更改正则表达式:)。如果您有类似的内容:
lesson1\u part5\u 2018
或类似内容,会发生什么?我没有这种情况,只有最后的课程号,但如果您的解决方案也可以涵盖其他情况,很好,您看到了:?您可以使用'.join([i for i in l if i.isdigit()])从字符串中提取数字,其中l是字符串。将其与for循环相结合,以迭代names@JonClements我会尝试natsort,即使我的想法是提取数字并重命名文件,而不是排序如果你有类似的内容会发生什么:lesson1\u part5\u 2018
或类似的内容?我没有这种情况,只有最后的课程号,但是,如果您的解决方案也可以涵盖其他情况,那么您将看到:您可以使用''从字符串中提取数字。join([i for i in l if i.isdigit()])
,其中l是字符串。将其与for循环相结合,以迭代names@JonClements我会尝试natsort,即使我的想法是提取数字,并重命名文件,而不是排序“title acr”,只是一个占位符,不是固定粒子,可以是任何东西,而我只想得到数字“3”?然后text.strip(“abcdefghijklmnopqrstuvwxyz”)
就可以了。“title acr”只是一个占位符,不是固定粒子,可以是任何东西,我只想得到数字“3”?然后text.strip(“abcdefghijklmnopqrstuvwxyz”)
就可以了。我真的需要进入re
,它看起来很强大。你可以让这个非常模块化的利奥波德-像什么?我真的需要进入re
,它看起来很强大。你可以让这个非常模块化的利奥波德-像什么?
Clean_number = Number.strip(" ")
# or
Clean_number = Number.replace(" ", "")