Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 拆分/标识字符串末尾的数字,该数字不';我没有固定数量的字符_Python_Python 3.x - Fatal编程技术网

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(" ", "")