Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách dùng Range (khoảng ký tự) trong Python Regular Expression

Trong Character Class [...], dùng dấu gạch ngang - để định nghĩa khoảng ký tự (range).

Cú pháp cơ bản

  • [a-z]: Tất cả chữ cái thường a-z.
  • [A-Z]: Tất cả chữ cái hoa A-Z.
  • [0-9]: Tất cả chữ số 0-9.
  • [a-zA-Z0-9]: Alphanumeric (tương đương \w không underscore).

Ví dụ

import re

# Chữ cái thường
print(re.findall(r'[a-c]', 'abcdef'))  # ['a', 'b', 'c']

# Chữ cái hoa
print(re.findall(r'[A-C]', 'ABCDEF'))  # ['A', 'B', 'C']

# Số 2 chữ số từ 00-59 (phút/giây)
print(re.findall(r'[0-5][0-9]', '00 30 59 60 99'))  # ['00', '30', '59']

# Kết hợp nhiều range
print(re.findall(r'[a-zA-Z0-9_]', 'a_Z-9'))  # ['a', '_', 'Z', '9']

Escape dấu gạch ngang

Nếu muốn khớp ký tự - thực tế trong class:

  • Đặt ở đầu: [-a-z]
  • Đặt ở cuối: [a-z-]
  • Escape: [a\-z] (khớp 'a', '-', 'z')

Lưu ý về Unicode

  • [a-z] chỉ khớp ASCII (mặc định Python 3 với re.ASCII flag).
  • Không dùng [a-z] cho Unicode letters (tiếng Việt, tiếng Nhật...).
  • Dùng \w (với Unicode mode mặc định) hoặc module regex với \p{L}.

Ví dụ thực tế: Validate time format HH:MM:SS


# 00-23 : 00-59 : 00-59
time_pattern = r'([01]\d|2[0-3]):[0-5]\d:[0-5]\d'

tests = ['12:30:45', '23:59:59', '24:00:00', '12:60:00']
for t in tests:
    print(f'{t} -> {bool(re.match(time_pattern, t))}')

Kết quả


12:30:45 -> True
23:59:59 -> True
24:00:00 -> False
12:60:00 -> False