Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để 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 một chuỗi.

Nếu chúng ta có các mẫu chữ rất đơn giản, sử dụng phương thức str.replace () là một giải pháp tối ưu.

Ví dụ

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

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

Đầu ra

Is USA Colder Than Canada?

Trước tiên, hãy để chúng tôi xem cách tìm kiếm văn bản.

# search for exact text
print(f"Output \n {text == 'USA'}")

Đầu ra

False

Chúng ta có thể tìm kiếm văn bản bằng các phương thức chuỗi cơ bản, chẳng hạn như str.find (), str.endswith (), str.startswith ().

# text start with
print(f"Output \n {text.startswith('Is')}")

Đầu ra

True
# text ends with
print(f"Output \n {text.startswith('Is')}")

Đầu ra

True
# search text with find
print(f"Output \n {text.find('USA')}")

Đầu ra

3

Nếu văn bản đầu vào để tìm kiếm phức tạp hơn thì chúng ta có thể sử dụng biểu thức chính quy và mô-đun re.

# Let us create a date in string format
date1 = '22/10/2020'
# Let us check if the text has more than 1 digit.
# \d+ - match one or more digits
import re
if re.match(r'\d+/\d+/\d+', date1):
print('yes')
else:
print('no')
yes

Bây giờ, quay lại với việc thay thế một văn bản. Nếu văn bản và chuỗi cần thay thế đơn giản thì hãy sử dụng str.replace ().

Đầu ra

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

Đầu ra

Is Australia Colder Than Canada?

Nếu có các mẫu phức tạp cần tìm kiếm và thay thế thì chúng ta có thể tận dụng các phương thức con () trong mô-đun re.

Đối số đầu tiên của sub () là mẫu cần khớp và đối số thứ hai là mẫu thay thế.

Trong ví dụ dưới đây, chúng tôi sẽ tìm các trường ngày tháng ở dạng dd / mm / yyyy và thay thế chúng bằng định dạng - yyyy-dd-mm.

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

Đầu ra

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

Một cách khác để làm là biên dịch biểu thức trước để có được hiệu suất tốt hơn.

Đầu ra

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

Đầu ra

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

re.subn () sẽ cung cấp cho chúng tôi số lần thay thế được thực hiện cùng với việc thay thế văn bản.

Đầu ra

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

Đầu ra

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

Đầu ra

print(f"Output \n {count}")

Đầu ra

2