Để 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
| Pattern | Giả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