[英]How to extract some characters from string using regex in python
有一個學生作業文件,其文件命名模式如下:
160608726_Task Basic Programming_02_02.pdf
200610612_Task PTI_12_01.xls
180609074_Task Industrial Automation 1_04_04.doc
我想確定文件的學生證號所有者、學生的批次、課程名稱、星期幾和文件擴展名。
學生批次是從前 2 個數字中獲得的(例如:20,那么年份是 2020,如果是 18,那么年份是 2018)
Output 程序為200610612_Task 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')
print (x)
但 output 是[]
。
我建議
^(?P<StudentIDNumber>(?P<batch>\d{2})\d*)_Task\s+(?P<Subject>[^_]+)_(?P<week>\d+)_(?P<Semester>\d+)\.(?P<Extension>\w+)$
請參閱正則表達式演示。 詳情:
^
- 字符串的開頭(?P<StudentIDNumber>(?P<batch>\d{2})\d*)
- 組“StudentIDNumber”:兩個或多個數字,組“batch”捕獲前兩個數字_Task
- 文字字符串(如果字符串未知,請使用\w+
)\s+
- 一個或多個空格(?P<Subject>[^_]+)
- 組“主題”:除_
之外的一個或多個字符_
- 一個_
字符(?P<week>\d+)
- 組“周”:一位或多位數字_
- 一個_
字符(?P<Semester>\d+)
- 組“學期”:一位或多位數字\.
- 一個點(?P<Extension>\w+)
- 組“擴展”:一個或多個單詞字符$
- 字符串結束。請參閱Python 演示:
import re
rx = re.compile(r'^(?P<StudentIDNumber>(?P<batch>\d{2})\d*)_Task\s+(?P<Subject>[^_]+)_(?P<week>\d+)_(?P<Semester>\d+)\.(?P<Extension>\w+)$')
files = ['160608726_Task Basic Programming_02_02.pdf',
'200610612_Task PTI_12_01.xls',
'180609074_Task Industrial Automation 1_04_04.doc']
for fn in files:
print(f"Parsing {fn}")
res = rx.match(fn)
if res:
resdict = res.groupdict()
resdict["batch"] = f"20{resdict['batch']}"
print(resdict)
Output:
Parsing 160608726_Task Basic Programming_02_02.pdf
{'StudentIDNumber': '160608726', 'batch': '2016', 'Subject': 'Basic Programming', 'week': '02', 'Semester': '02', 'Extension': 'pdf'}
Parsing 200610612_Task PTI_12_01.xls
{'StudentIDNumber': '200610612', 'batch': '2020', 'Subject': 'PTI', 'week': '12', 'Semester': '01', 'Extension': 'xls'}
Parsing 180609074_Task Industrial Automation 1_04_04.doc
{'StudentIDNumber': '180609074', 'batch': '2018', 'Subject': 'Industrial Automation 1', 'week': '04', 'Semester': '04', 'Extension': 'doc'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.