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

Cách dùng biến (variable) trong Python Regular Expression

Python regex pattern là string, có thể xây dựng động bằng concatenation hoặc f-string. Biến chứa pattern con không được chứa metacharacter nếu muốn khớp literal.

Ví dụ cơ bản: Concatenation

import re

s = 'I love books'
var_name = 'love'

# Xây dựng pattern: bất kỳ tiền tố + var_name + hậu tố
pattern = '(.+)' + var_name + '(.+)'
result = re.search(pattern, s)
print(result.group())  # I love books

Kết quả


<_sre.SRE_Match object at 0x...>
<_sre.SRE_Match object at 0x...>

⚠️ Vấn đề: Biến chứa metacharacter


var = 'love.'  # Dấu chấm là metacharacter!
pattern = '(.+)' + var + '(.+)'
re.search(pattern, 'I loveXbooks')  # KHỚP! Vì '.' khớp 'X'

Giải pháp: re.escape()

Escape tất cả metacharacter trong biến để khớp literal:


var = 'love.'
safe_var = re.escape(var)  # 'love\.'
pattern = '(.+)' + safe_var + '(.+)'
re.search(pattern, 'I loveXbooks')  # None
re.search(pattern, 'I love.books')  # Match!

F-string (Python 3.6+) - Rõ ràng hơn


var = 'love'
pattern = fr'(.+){re.escape(var)}(.+)'
# hoặc nếu var đã safe
pattern = fr'(.+){var}(.+)'

Ví dụ thực tế: Tìm từ khóa động


def find_keyword(text, keyword):
    """Tìm keyword như từ hoàn chỉnh (word boundary)"""
    pattern = rf'\b{re.escape(keyword)}\b'
    return re.search(pattern, text, re.IGNORECASE)

print(find_keyword('I love Python', 'love'))    # Match
print(find_keyword('I love Python', 'Py'))      # None (không phải từ hoàn chỉnh)
print(find_keyword('I love Python', 'Python'))  # Match

Tóm tắt

  • Xây dựng pattern bằng string concatenation hoặc f-string.
  • Luôn dùng re.escape(var) nếu biến từ input người dùng/config.
  • Biến chứa pattern con phức tạp: truyền trực tiếp (đã là regex).
  • Compile pattern nếu dùng lặp lại: re.compile(pattern).