如何在python中使用正则表达式从字符串中提取一些字符

如何在python中使用正则表达式从字符串中提取一些字符,python,regex,text,Python,Regex,Text,有一个学生作业文件,其文件命名模式如下: 160608726_Task Basic Programming_02_02.pdf 200610612_Task PTI_12_01.xls 180609074_Task Industrial Automation 1_04_04.doc 我想确定学生ID号文件的所有者、学生的批次、课程的名称、星期以及文件的扩展名 学生批次从2个第一个数字中获得(例如:20,则年份为2020年,如果18,则年份为2018年) 输出程序用于200610612_任务PT

有一个学生作业文件,其文件命名模式如下:

160608726_Task Basic Programming_02_02.pdf
200610612_Task PTI_12_01.xls
180609074_Task Industrial Automation 1_04_04.doc
我想确定学生ID号文件的所有者、学生的批次、课程的名称、星期以及文件的扩展名

学生批次从2个第一个数字中获得(例如:20,则年份为2020年,如果18,则年份为2018年)

输出程序用于
200610612_任务PTI_12_01.xls
文件名:

此作业属于学生ID号为
200610612

的学生 这些学生是
2020
批次。
主题是
PTI

本作业适用于第12周

课程在第1学期举行
此文件扩展名为
xls

我尝试了几种语法,最后一种语法是

txt=“200610612_Tugas PTI_12_01.xls”
x=re.findall(r“\d{2}”,'txt')
打印(x)
但是我建议输出是
[]

^(?P(?P\d{2})\d*)\u Task\s+(?P[^\u]+)\ u(?P\d+)\u(?P\d+)\(?P\w+)$
看。详情:

  • ^
    -字符串的开头
  • (?P(?P\d{2})\d*)
    -将“StudentIDNumber”分组:两个或更多数字,并将捕获前两个数字的“batch”分组
  • \u任务
    -文字字符串(如果字符串未知,请使用
    \w+
  • \s+
    -一个或多个空格
  • (?P[^]+)
    -分组“主题”:一个或多个字符,而不是
  • 字符
  • (?P\d+)
    -组“周”:一个或多个数字
  • 字符
  • (?P\d+)
    -组“学期”:一个或多个数字
  • \。
    -一个点
  • (?P\w+)
    -组“扩展”:一个或多个单词字符
  • $
    -字符串结束
见:

重新导入
rx=re.compile(r'^(?P(?P\d{2})\d*)\u Task\s+(?P[^ P]+)\u(?P\d+)\u(?P\d+)\(?P\w+)$)
files=['160608726_Task Basic Programming_02_02.pdf',
“200610612_任务PTI_12_01.xls”,
“180609074_任务工业自动化1_04_04.doc”]
对于文件中的fn:
打印(f“解析{fn}”)
res=接收匹配(fn)
如果有的话:
resdict=res.groupdict()
resdict[“batch”]=f“20{resdict['batch']}”
打印(重新编辑)
输出:

解析160608726_任务基本编程_02_02.pdf {'StudentIDNumber':'160608726','batch':'2016','Subject':'Basic Programming','week':'02','Semment':'02','Extension':'pdf'} 解析200610612_任务PTI_12_01.xls {'StudentIDNumber':'200610612','batch':'2020','Subject':'PTI','week':'12','Semment':'01','Extension':'xls'} 解析180609074_任务工业自动化1_04_04.doc {'StudentIDNumber':'180609074','batch':'2018','Subject':'Industrial Automation 1','week':'04','sement':'04','Extension':'doc'}