Kỹ thuật xử lý chuỗi nâng cao trong Python

Ký tự thoát (Escape Characters)

Trong Python, ký tự thoát được biểu thị bằng dấu gạch chéo ngược (\) đứng trước một ký tự cụ thể để thể hiện các ý nghĩa đặc biệt. Bảng dưới đây liệt kê các ký tự thoát phổ biến:

Ký tự thoát Mô tả
\b Backspace (Xóa lùi)
\n Newline (Xuống dòng)
\r Carriage Return (Trở về đầu dòng)
\t Tab (Tab ngang)
\\" Dấu ngoặc kép
\\' Dấu ngoặc đơn
\\ Dấu gạch chéo ngược

Ví dụ sau minh họa cách sử dụng các ký tự thoát trong chuỗi:

raw_text = 'Học\nPython\nRất Vui'
print(raw_text)

Kết quả hiển thị sẽ có sự ngắt dòng tại các vị trí chứa \n. Ngoài ra, bạn có thể sử dụng \t để căn chỉnh dữ liệu dưới dạng bảng:

header = 'Sản phẩm\t\tĐơn giá\t\tSố lượng'
row = 'Laptop\t\t20.000.000\t\t5'
print(header)
print(row)

Định dạng chuỗi với toán tử %

Python hỗ trợ định dạng chuỗi sử dụng toán tử % để nhúng các biến vào bên trong một chuỗi mẫu. Các phần tử định dạng được gọi là chuyển đổi định dạng (conversion specifiers).

Cú pháp cơ bản như sau:

cost = 150
print("Tổng chi phí là: %s đồng" % cost)

Trong ví dụ trên, %s là giữ chỗ cho chuỗi. Nếu bạn cần chèn nhiều giá trị, chúng cần được đặt trong một cặp dấu ngoặc đơn.

name = "Nam"
age = 25
print("%s năm nay %d tuổi" % (name, age))

Dưới đây là các ký tự định dạng thường dùng:

  • %s: Chuỗi (str).
  • %d, %i: Số nguyên (int).
  • %f: Số thực (float).
  • %x, %X: Số nguyên hệ 16.
  • %o: Số nguyên hệ 8.
  • %%: Ký tự %.

Bạn có thể quy định chiều rộng và độ chính xác cho kết quả đầu ra:

val = 89
# Hiển thị số nguyên với độ rộng tối thiểu là 5 (căn phải mặc định)
print("Giá trị: %5d" % val)
# Hiển thị số thực, tổng độ rộng 8, 3 chữ số thập phân
pi = 3.14159
print("Pi: %8.3f" % pi)

Các cờ điều khiển có thể thêm vào phía trước chiều rộng để thay đổi hành vi:

  • -: Căn lề trái.
  • +: Hiển thị dấu (+ hoặc -).
  • 0: Điền số 0 vào khoảng trống thay vì khoảng trắng.
num = 42
print("Căn trái: %-5d|" % num)
print="Điền 0: %05d" % num)
print="Hiện dấu: %+5d" % num)

Truy xuất phần tử chuỗi (Indexing và Slicing)

Chuỗi trong Python là một chuỗi (sequence) các ký tự bất biến. Bạn có thể truy cập từng ký tự thông qua chỉ số (index). Chỉ số bắt đầu từ 0 từ trái sang phải, và -1 từ phải sang trái.

msg = 'Lập trình Python'
# Lấy ký tự đầu tiên
print(msg[0])  # L
# Lấy ký tự cuối cùng
print(msg[-1]) # n

Để lấy ra một chuỗi con (substring), ta sử dụng cú pháp cắt lát (slicing): [start:end]. Lưu ý rằng ký tự tại vị trí end sẽ không được bao gồm.

data = 'Học Python để đi làm'
# Lấy từ index 4 đến 9
print(data[4:10]) # Python
# Lấy từ index 4 đến cuối
print(data[4:])   # Python để đi làm
# Lấy từ đầu đến index 3
print(data[:3])   # Học

Các hàm built-in hữu ích cho chuỗi:

  • len(s): Trả về độ dài chuỗi.
  • max(s): Trả về ký tự có mã ASCII lớn nhất.
  • min(s): Trả về ký tự có mã ASCII nhỏ nhất.
  • sub in s: Kiểm tra sub có nằm trong s hay không.
s = 'abcXYZ'
print(len(s))  # 6
print('a' in s) # True

Chuyển đổi chữ hoa chữ thường

Lớp str cung cấp các phương thức tiện lợi để xử lý kiểu chữ:

  • title(): Viết hoa chữ cái đầu tiên của mỗi từ.
  • upper(): Chuyển toàn bộ chuỗi sang chữ hoa.
  • lower(): Chuyển toàn bộ chuỗi sang chữ thường.
txt = 'python programming'
print(txt.title())  # Python Programming
print(txt.upper())  # PYTHON PROGRAMMING
print(txt.lower())  # python programming

Xử lý khoảng trắng (Strip)

Để loại bỏ các khoảng trắng ở đầu hoặc cuối chuỗi, Python cung cấp 3 phương thức chính. Lưu ý rằng chuỗi là bất biến (immutable), nên các phương thức này trả về một bản sao mới thay vì sửa đổi chuỗi gốc.

  • lstrip(): Xóa khoảng trắng bên trái.
  • rstrip(): Xóa khoảng trắng bên phải.
  • strip(): Xóa khoảng trắng cả hai phía.

Bạn cũng có thể truyền vào các ký tự cụ thể cần loại bỏ:

raw_str = '  http://example.com  '
print(raw_str.strip()) # 'http://example.com'

clean_str = '***Xin chào***'
print(clean_str.strip('*')) # 'Xin chào'

Tìm kiếm và thay thế

Các phương thức tìm kiếm và thay thế nội dung chuỗi rất quan trọng trong việc xử lý văn bản:

  • startswith(sub): Trả về True nếu chuỗi bắt đầu bằng sub.
  • endswith(sub): Trả về True nếu chuỗi kết thúc bằng sub.
  • find(sub): Trả về chỉ số đầu tiên của sub, hoặc -1 nếu không tìm thấy.
  • index(sub): Tương tự find, nhưng ném ra ValueError nếu không tìm thấy.
  • replace(old, new, count): Thay thế old bằng new. count là số lần thay đổi tối đa (tùy chọn).
content = 'Python is powerful. Python is easy.'
print(content.startswith('Python')) # True
print(content.find('is'))           # 7
print(content.replace('is', 'was')) # Python was powerful. Python was easy.

Tách và nối chuỗi (Split và Join)

Hai phương thức này đối ngược nhau:

  • split(sep, maxsplit): Tách chuỗi thành danh sách (list) dựa trên dấu phân cách.
  • join(iterable): Nối các phần tử của một iterable (thường là list) thành một chuỗi, dùng chuỗi gọi phương thức làm dấu ngăn cách.
data_line = 'apple,banana,cherry'
# Tách chuỗi thành list
fruits = data_line.split(',')
print(fruits) # ['apple', 'banana', 'cherry']

# Nối list thành chuỗi với dấu gạch ngang
new_str = '-'.join(fruits)
print(new_str) # apple-banana-cherry

Đăng vào ngày 30 tháng 6 lúc 06:33