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

Cách viết Regex tìm chữ số lặp lại trong số (repeating digits) Python

Dùng backreference \1 để tham chiếu đến group capturing đầu tiên, kết hợp quantifier để tìm ký tự lặp lại.

Ví dụ: Tìm 4 chữ số giống nhau liên tiếp

import re

# (\d) capture 1 digit, \1{3} lặp lại 3 lần nữa (tổng 4 lần)
pattern = r'(\d)\1{3}'

text = '54222267890'
match = re.search(pattern, text)
if match:
    print(match.group())  # 2222

Kết quả


2222

Giải thích Pattern

  • (\d): Group 1 - capture 1 chữ số bất kỳ.
  • \1: Backreference - khớp CHÍNH XÁC ký tự đã capture ở group 1.
  • {3}: Quantifier - lặp lại 3 lần.
  • → Tổng cộng 4 chữ số giống nhau liên tiếp.

Các biến thể

PatternKhớp
(\d)\1+2+ chữ số giống nhau liên tiếp
(\d)\1{2}Chính xác 3 chữ số giống nhau
(\d)\1{3,}4+ chữ số giống nhau
(\d)\1Cặp chữ số giống nhau (doublet)

Ứng dụng: Validate không cho phép 4 số lặp (thẻ tín dụng, OTP...)


def has_repeating_digits(s, min_repeat=4):
    pattern = rf'(\d)\1{{{min_repeat-1},}}'
    return bool(re.search(pattern, s))

print(has_repeating_digits('1234567890'))  # False
print(has_repeating_digits('1111234567'))  # True
print(has_repeating_digits('1234444567'))  # True

Lưu ý

  • Backreference \1 chỉ hoạt động trong cùng một pattern.
  • Trong replacement string (re.sub), dùng \1 hoặc \g<1>.
  • Named group: (?P\d)(?P=digit){3}.