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

Cách tìm kiếm và thay thế văn bản trong Python

Vấn đề

Bạn muốn tìm kiếm và thay thế một mẫu văn bản trong chuỗi.

Nếu mẫu rất đơn giản (chuỗi chữ nghĩa), phương thức str.replace() là giải pháp tối ưu.

Tìm kiếm văn bản

Ví dụ: Tạo chuỗi từ generator


def sample():
    yield 'Is'
    yield 'USA'
    yield 'Colder'
    yield 'Than'
    yield 'Canada?'

text = ' '.join(sample())
print(f"Output \n {text}")

Kết quả: Is USA Colder Than Canada?

Tìm kiếm chính xác


# Tìm kiếm chính xác
print(f"Output \n {text == 'USA'}")

Kết quả: False

Sử dụng các phương thức chuỗi cơ bản


# Kiểm tra bắt đầu bằng
print(f"Output \n {text.startswith('Is')}")
# Kết quả: True

# Kiểm tra kết thúc bằng (lưu ý: ví dụ gốc có lỗi, dùng startswith lại)
print(f"Output \n {text.endswith('Canada?')}")
# Kết quả: True

# Tìm vị trí chuỗi con
print(f"Output \n {text.find('USA')}")
# Kết quả: 3

Sử dụng Regular Expression (re module) cho mẫu phức tạp


import re

# Tạo chuỗi ngày tháng
date1 = '22/10/2020'

# Kiểm tra mẫu: một hoặc nhiều chữ số (\d+)
if re.match(r'\d+/\d+/\d+', date1):
    print('yes')
else:
    print('no')
# Kết quả: yes

Thay thế văn bản

Thay thế đơn giản với str.replace()


print(f"Output \n {text.replace('USA', 'Australia')}")

Kết quả: Is Australia Colder Than Canada?

Thay thế phức tạp với re.sub()

Đối số đầu tiên là mẫu khớp, đối số thứ hai là mẫu thay thế. Ví dụ: chuyển định dạng ngày dd/mm/yyyy sang yyyy-dd-mm. Các số có gạch chéo ngược như \3 tham chiếu đến nhóm bắtCapture group trong mẫu.


import re

sentence = 'Date is 22/11/2020. Tommorow is 23/11/2020.'
# Thay thế
replaced_text = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', sentence)
print(f"Output \n {replaced_text}")

Kết quả: Date is 2020-22-11. Tommorow is 2020-23-11.

Biên dịch mẫu trước để tăng hiệu năng


pattern = re.compile(r'(\d+)/(\d+)/(\d+)')
replaced_pattern = pattern.sub(r'\3-\1-\2', sentence)
print(f"Output \n {replaced_pattern}")

Kết quả: Date is 2020-22-11. Tommorow is 2020-23-11.

Đếm số lần thay thế với re.subn()


output, count = pattern.subn(r'\3-\1-\2', sentence)
print(f"Output \n {output}")
print(f"Output \n {count}")

Kết quả:


Date is 2020-22-11. Tommorow is 2020-23-11.
2