在字符串末尾分割/标识一个​​数字,该数字没有固定的字符数

时间:2018-09-18 11:31:48

标签: python python-3.x

我要重命名的文件夹中有一组文件。格式为:

lesson1
lesson2
.....
lesson11
lesson99
lesson100
lesson130   

在Windows中排序时,顺序是我的字符串,因此不正确(示例):

lesson1 
lesson100

我想成为(重命名):

_001_lesson
_010_lesson

如何在字符串“教训”的末尾捕捉/分割编号部分?

在字符串不固定的情况下(如本课所述),这是更复杂的情况:

title abc1
title def2
title acr 3 

2 个答案:

答案 0 :(得分:2)

我建议使用python's re module

以下内容
import re

def rename(old_name):
  # Run a Regex to find the ending number
  match = re.search('lesson(\d+)', old_name)

  # If that was a match (that should be necessary, but 
  # checking input is always a good idea)
  if match:
    # Retrieves the id and converts it to an integer
    id = int(match.group(1))

    # Gets the formatted name out
    return '_{:03d}_lesson'.format(id)

  return None

这是非常模块化的。下次您想解析相似的文件名时,可以更改正则表达式:)。

答案 1 :(得分:1)

对于固定字符串,可以使用split方法:

Number = "lesson123".split("lesson")[1] # "123"
Title  = "lesson123".split(Number)[0]   # "lesson"

对于_001_lesson,您可以这样写,假设您需要在数字前添加N个额外的零。

New_name = "_" + N*"0" + "%d_%s" %(Number, Title)

对于另一个示例,我知道您想抓住“标题”之后的所有字符?

Number = "title acr 3".split("title")[1] # " acr 3"
Title = "title acr 3".split(Number)[0]   # "title"

如果您对这些多余的空格感到恼火,可以使用stripreplace将其删除:

Clean_number = Number.strip(" ")
# or
Clean_number = Number.replace(" ", "")