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

Cách khớp whitespace nhưng KHÔNG khớp newline trong Python Regex

Để khớp space/tab nhưng loại trừ newline, dùng character class [ \t] hoặc [^\S\n] (whitespace trừ newline).

Ví dụ

import re

text = """I find     Tutorialspoint useful"""

# Khớp 1 hoặc nhiều space/tab (KHÔNG newline)
matches = re.findall(r'[ \t]+', text)
print(matches)
# [' ', '    ']

Kết quả

[' ', '    ']

Các cách viết

PatternGiải thích
[ \t]+Rõ ràng: space hoặc tab, 1+ lần. Nhanh, dễ hiểu.
[^\S\n]+Whitespace (\s) trừ newline (\n). Kỹ thuật hơn.
(?!\n)\s+Negative lookahead: whitespace không phải newline. Chậm hơn.

Lưu ý về pattern gốc trong bài

Pattern (\s){1,} trong bài gốc có vấn đề:

  • (\s) tạo capturing group cho mỗi ký tự whitespace.
  • {1,} áp dụng cho group → lặp group, không lặp ký tự.
  • Kết quả: list các ký tự đơn lẻ [' ', ' ', ' ', ' '] thay vì chuỗi [' '].

Cách đúng để gom whitespace (không newline)


# Không capture group, dùng non-capturing hoặc bỏ qua group
re.findall(r'(?:[ \t])+', text)  # ['    '] - 1 match cho chuỗi space
re.findall(r'[ \t]+', text)      # ['    '] - đơn giản nhất