String replace là một bài toán cơ bản, quen thuộc thường gặp trong quá trình viết code thực hiện chương trình của chúng ta. Trong Python, chúng ta được cung cấp sẵn hàm cho thao tác xử lý này. Mặc dù vậy, không dễ để nắm rõ được hết các tham số đầu vào của hàm xử lý thay thế chuỗi và áp dụng một cách hiệu quả. Bài viết này chúng ta cùng tìm hiểu về hàm replace string Python và cách sử dụng nó thông qua các ví dụ cụ thể nhé.
Replace Python là gì?
String replace là một hàm tích hợp sẵn trong Python, có chức năng để thay thế một chuỗi con trong chuỗi đầu vào bằng một chuỗi khác. Nó sẽ thực hiện việc duyệt chuỗi đầu vào, tìm kiếm tất cả các vị trí mà chuỗi con cần thay thế xuất hiện và thực hiện việc thay thế tất cả bằng chuỗi mới.
Cú pháp của hàm:
string.replace(oldvalue, newvalue, count)
Trong đó:
- string: chuỗi đầu vào cần thực hiện thay thế giá trị
- oldvalue: chuỗi con cần tìm kiếm để thay thế, tham số này là bắt buộc
- newvalue: chuỗi mới sẽ thay thế cho oldvalue, tham số này là bắt buộc
- count: tham số tùy chọn. Sử dụng để xác định số lần thực hiện việc thay thế giá trị oldvalue bằng newvalue
Lưu ý khi sử dụng hàm replace trong Python:
- Python replace là hàm tích hợp sẵn của các đối tượng trong lớp String. Bạn không thể sử dụng với các kiểu dữ liệu khác, nếu cố ý gọi thì sẽ nhận về lỗi “AttributeError: ‘int’ object has no attribute ‘replace’”
- Tham số count nếu không truyền vào thì replace sẽ thực hiện thay thế toàn bộ chuỗi con mà nó tìm được, điều này giống với hàm replaceAll ở một số ngôn ngữ lập trình khác.
- Hàm replace không làm thay đổi chuỗi gốc mà sẽ trả về một chuỗi mới đã được thực hiện việc thay thế. Vì thế bạn có thể yên tâm sử dụng mà không lo ảnh hưởng đến luồng chung của chương trình.
Cách sử dụng replace string Python
String replace Python là một hàm cơ bản và dễ dàng sử dụng bằng việc gọi hàm với một đối tượng chuỗi (String), truyền 2 tham số tương ứng. Bạn có thể xem ví dụ dưới đây:
string = "OldValue_1 Python OldValue_2 String" replace_all_string = string.replace("OldValue", "NewValue") replace_once_string = string.replace("OldValue", "NewValue", 1) #original string = OldValue_1 Python OldValue_2 String print("original string = ", string) #replaced all string = NewValue_1 Python NewValue_2 String print('replaced all string = ', replace_all_string) #replaced once string = NewValue_1 Python OldValue_2 String print('replaced once string = ', replace_once_string)
Ở ví dụ trên, chúng ta có thể thấy rằng biến string sẽ được giữ nguyên giá trị khi gọi hàm replace, hàm sẽ trả về chuỗi mong muốn sau khi đã thực hiện việc thay thế chuỗi. Nếu không truyền tham số thứ 3 (tham số count) thì hàm sẽ thực hiện thay thế tất cả các giá trị “OldValue” thành “NewValue”. Trường hợp truyền tham số count = 1, việc thay thế sẽ chỉ thực hiện ở giá trị “OldValue” đầu tiên được tìm thấy.
Replace in Python sẽ thực hiện thuật toán tìm kiếm tất cả các chuỗi con trong chuỗi cha, đây là một bài toán cơ bản trong CTDL> có độ phức tạp về thời gian là O(m*n) với m là độ dài chuỗi con cần tìm và n là độ dài chuỗi đầu vào cần thay thế.
Các cách thay thế chuỗi khác trong Python
Trong Python, ngoài hàm replace thì chúng ta còn có thể sử dụng một số phương thức khác để thực hiện việc thay thế giá trị trong chuỗi. Ví dụ như chúng ta có thể sử dụng vòng lặp để duyệt chuỗi và thực hiện thay thế; hoặc sử dụng hàm slice, join để cắt và ghép chuỗi.
Trong đó, có một cách thường được so sánh nhiều với replace chính là dùng phương thức re.sub. Phần này mình sẽ nói rõ hơn về sự khác nhau giữa 2 phương thức này cùng cách sử dụng nhé.
Phương thức re.sub thuộc về module re (regular expressions) thường được sử dụng cho việc xử lý các biểu thức chính quy trong Python. Và vì thế để sử dụng hàm này, trước tiên bạn cần import module trên vào chương trình. re.sub() hoạt động như một hàm (function), tất cả giá trị đầu vào sẽ được truyền thông qua tham số hàm; ngược lại thì replace là một phương thức (method) của lớp String và nó thực hiện trên biến đối tượng.
Tham khảo việc làm Python Hồ Chí Minh hấp dẫn!
import re string = "OldValue_1 Python OldValue_2 String" replace_by_replace = string.replace("OldValue", "NewValue") replace_by_re_sub = re.sub("OldValue", "NewValue", string) #replaced by replace method string = NewValue_1 Python NewValue_2 String print('replaced by replace method string = ', replace_by_replace) #replaced by re.sub function string = NewValue_1 Python NewValue_2 String print('replaced by re.sub function string = ', replace_by_re_sub)
Như ở ví dụ trên, chúng ta có thể sử dụng 2 hàm trên với cách thức khá giống nhau và đều cho ra kết quả mong muốn. Vậy điểm khác nhau của 2 phương thức trên là gì?
Đầu tiên là về khả năng so khớp mẫu (pattern matching), replace chỉ hỗ trợ các chuỗi string đơn giản và không thể sử dụng biểu thức chính quy để tìm kiếm, so sánh và thay thế như trong hàm re.sub. Ngoài ra, hàm re.sub còn cho phép chúng ta sử dụng tham chiếu ngược (backreferences) để thực hiện việc xử lý thay thế giá trị một cách cụ thể, phức tạp hơn. Rõ ràng, hàm re.sub cho thấy tính linh hoạt cao hơn hẳn so với hàm replace trong việc thực hiện bài toán thay thế chuỗi trong Python.
import re text = "The quick brown fox jumps over the lazy dog" pattern = r'(bw+b)' # Matches each word replacement = lambda match: match.group(1)[::-1] # Reverses each matched word result = re.sub(pattern, replacement, text) print(result) # Output: ehT kciuq nworb xof spmuj revo eht yzal god
Tuy nhiên, vì xử lý phức tạp nên về mặt hiệu năng, hàm re.sub sẽ chạy chậm hơn tương đối so với phương thức replace. Bên cạnh đó bạn cần import module re để sử dụng được hàm, điều này cũng khiến chương trình cần sử dụng thêm tài nguyên cho việc xử lý. Vì vậy trong hầu hết các bài toán thay thế chuỗi đơn giản thì replace vẫn nên ưu tiên được sử dụng. Hãy chỉ cân nhắc sử dụng re.sub khi yêu cầu bài toán của bạn cần những tính năng thay thế chuỗi phức tạp hơn, tránh việc lãng phí tài nguyên không cần thiết trong chương trình.
Kết bài
Hàm replace trong Python cung cấp cho chúng ta một thao tác xử lý nhanh, dễ dàng để giải quyết một bài toán thay thế chuỗi phổ biến. Nó sẽ rất hữu ích trong việc lập trình nếu bạn nắm rõ, tận dụng hết các tham số mà hàm này cung cấp. Hy vọng bài viết hữu ích dành cho các bạn và hẹn gặp lại trong các bài viết tiếp theo của mình.
Tác giả: Phạm Minh Khoa
Xem thêm:
- Def trong Python và cách sử dụng
- Hàm trong Python – Cú pháp và một số hàm phổ biến
- Tất tần tật về các loại toán tử trong Python
Xem thêm việc làm công nghệ hấp dẫn trên TopDev