Dùng anchor $ (cuối chuỗi) kết hợp với pattern phần mở rộng để khớp file extension.
Ví dụ cơ bản
import re
filename = '87654_3.doc'
# Khớp '.doc' ở cuối chuỗi
match = re.search(r'\.doc$', filename)
if match:
print(match.group()) # .doc
Kết quả
.doc
Pattern tổng quát hơn
# Khớp bất kỳ extension nào (chấm + 1-4 chữ cái/số)
r'\.[a-zA-Z0-9]{1,4}$'
# Khớp extension phổ biến
r'\.(?:doc|docx|pdf|txt|jpg|png|xls|xlsx)$'
# Capture extension vào group
r'\.([a-zA-Z0-9]+)$'
Ví dụ trích xuất extension
files = ['report.doc', 'image.png', 'data.csv', 'script.py', 'README']
for f in files:
m = re.search(r'\.([a-zA-Z0-9]+)$', f)
ext = m.group(1) if m else 'no extension'
print(f'{f:15} -> {ext}')
Kết quả
report.doc -> doc
image.png -> png
data.csv -> csv
script.py -> py
README -> no extension
Lưu ý
- Escape dấu chấm:
\.(dấu chấm không escape khớp bất kỳ ký tự nào). - Anchor
$đảm bảo khớp ở cuối filename. - Dùng
re.IGNORECASEhoặc[a-zA-Z]cho case-insensitive. - Cách tốt hơn cho path:
os.path.splitext()hoặcpathlib.Path.suffix(không cần regex).
Cách Pythonic (không regex)
from pathlib import Path
for f in files:
ext = Path(f).suffix # '.doc', '.png', ''...
print(f'{f:15} -> {ext.lstrip(".") or "no extension"}')