Hướng dẫn python replace multiple words in string - python thay thế nhiều từ trong chuỗi

Tôi cần một giải pháp trong đó các chuỗi được thay thế có thể là một biểu thức thông thường, ví dụ để giúp bình thường hóa một văn bản dài bằng cách thay thế nhiều ký tự khoảng trắng bằng một ký tự duy nhất. Dựa trên một chuỗi câu trả lời từ những người khác, bao gồm Miniquark và MMJ, đây là những gì tôi đã nghĩ ra:

def multiple_replace(string, reps, re_flags = 0):
    """ Transforms string, replacing keys from re_str_dict with values.
    reps: dictionary, or list of key-value pairs (to enforce ordering;
          earlier items have higher priority).
          Keys are used as regular expressions.
    re_flags: interpretation of regular expressions, such as re.DOTALL
    """
    if isinstance(reps, dict):
        reps = reps.items()
    pattern = re.compile("|".join("(?P<_%d>%s)" % (i, re_str[0])
                                  for i, re_str in enumerate(reps)),
                         re_flags)
    return pattern.sub(lambda x: reps[int(x.lastgroup[1:])][1], string)

Nó hoạt động cho các ví dụ được đưa ra trong các câu trả lời khác, ví dụ:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'

Điều chính đối với tôi là bạn cũng có thể sử dụng các biểu thức thông thường, ví dụ, chỉ để thay thế toàn bộ từ hoặc để bình thường hóa không gian trắng:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"

Nếu bạn muốn sử dụng các phím từ điển làm chuỗi bình thường, bạn có thể thoát khỏi chúng trước khi gọi nhiều_replace bằng ví dụ: Chức năng này:

def escape_keys(d):
    """ transform dictionary d by applying re.escape to the keys """
    return dict((re.escape(k), v) for k, v in d.items())

>>> multiple_replace(s, escape_keys(re_str_dict))
"I don't want to change this name:\n  Philip II of Spain"

Chức năng sau đây có thể giúp tìm các biểu thức chính quy sai lầm trong số các khóa từ điển của bạn (vì thông báo lỗi từ nhiều_replace không nói lắm):

def check_re_list(re_list):
    """ Checks if each regular expression in list is well-formed. """
    for i, e in enumerate(re_list):
        try:
            re.compile(e)
        except (TypeError, re.error):
            print("Invalid regular expression string "
                  "at position {}: '{}'".format(i, e))

>>> check_re_list(re_str_dict.keys())

Lưu ý rằng nó không chuỗi thay thế, thay vào đó thực hiện chúng đồng thời. Điều này làm cho nó hiệu quả hơn mà không hạn chế những gì nó có thể làm. Để bắt chước ảnh hưởng của chuỗi, bạn có thể chỉ cần thêm nhiều cặp thay thế chuỗi và đảm bảo thứ tự dự kiến ​​của các cặp:

>>> multiple_replace("button", {"but": "mut", "mutton": "lamb"})
'mutton'
>>> multiple_replace("button", [("button", "lamb"),
...                             ("but", "mut"), ("mutton", "lamb")])
'lamb'

Bạn có biết rằng các chuỗi là các đối tượng bất biến trong Python? Giá trị của chúng, một khi được tuyên bố, không thể thay đổi. Do đó, cần phải sử dụng các chức năng khác nhau để có thể hoạt động trên các chuỗi. Trong bài viết này, chúng tôi sẽ tìm hiểu cách thay thế nhiều ký tự trong một chuỗi trong Python.

Trước khi di chuyển xa hơn, chúng ta hãy đánh bại một chút trên các chuỗi:

Chuỗi là gì?

Trong Python, mọi thứ đều là một đối tượng. Các chuỗi cũng là các đối tượng Python, nhưng chúng thường được định nghĩa là một chuỗi các ký tự được đặt giữa các dấu ngoặc kép (hoặc '' hoặc ""). Các ký tự này có thể là các ký tự A-Z, A-Z, 0-9 hoặc đặc biệt (như $, %) và không gian trắng ('').

Ý bạn là gì khi thay thế nhiều ký tự trong một chuỗi?

Sự cần thiết phải thay thế một vài ký tự (có thể một hoặc nhiều) từ một chuỗi thường xuất hiện trong khi xử lý các vấn đề. & NBSP; Nhưng câu hỏi là, bạn hiểu gì bằng cách thay thế nhiều ký tự trong một chuỗi?

Chuỗi có nhiều hoạt động được thực hiện trên chúng. Nhưng khi chúng ta nói "thay thế các ký tự trong một chuỗi trong Python", các trường hợp sau đây xuất hiện trong tâm trí:

  1. Thay thế một ký tự trong một chuỗi bằng một ký tự khác. Ví dụ: giả sử chúng tôi có một chuỗi "favtutor" và chúng tôi muốn thay thế lần xuất hiện đầu tiên của 't' bằng 't'. Bây giờ, vì chúng ta chỉ thay thế 't' bằng một 'T' khác, nên điều này được gọi là thay thế một ký tự duy nhất trong một chuỗi.For example, Let's say we have a string "Favtutor" and we want to replace the first occurrence of 't' with 'T'. Now, since we are only replacing 't' with another 'T', this is known as replacing a single character in a string.
  2. Thay thế tất cả các lần xuất hiện của một ký tự trong một chuỗi bằng một ký tự khác. Chúng ta hãy lấy ví dụ trên, nói rằng bạn muốn thay thế cả hai lần xuất hiện của "T" trong chuỗi "favtutor" bằng 't'. Điều này sẽ dẫn đến chuỗi: "favtutor". Do đó, điều này đang thay thế tất cả các lần xuất hiện của một ký tự trong một chuỗi. (Bạn luôn có thể cung cấp số lần xuất hiện, của nhân vật đó, bạn muốn thay thế).Let's take the above example, say you want to replace both the occurrences of "t" in string "Favtutor" with 'T'. This will result in the string: "FavTuTor". Hence, this is replacing all occurrences of a character in a string. (You can always provide the number of occurrences, of that character, you want to replace).
  3. Thay thế nhiều ký tự trong một chuỗi bằng ký tự 'giống nhau'. Ví dụ: bạn có một chuỗi "Hello World" và bạn muốn thay thế các ký tự, nói "L" và "O", bằng một nhân vật khác, nói '!'. Điều này sẽ dẫn đến: "Anh ấy !!! W! R! D". Đây là một ví dụ về việc thay thế nhiều ký tự trong một chuỗi bằng một ký tự (giống nhau).For example, You have a string "Hello world" and you want to replace the characters, say "l" and "o", with another character, say '!'. This will result in: "He!!! W!r!d". This is an example of replacing multiple characters in a string with a single (same) character.
  4. Thay thế nhiều ký tự trong một chuỗi bằng các ký tự khác (khác nhau). Ví dụ, hãy lấy tuyên bố, "chuỗi là bất biến". Bạn cần thay thế các ký tự, nói ['r', 'm', 'i'], với, hãy lấy ['r', '!', 'M'], theo thứ tự tương ứng, tức là 'r' đã thay thế bởi 'r', "m" được thay thế bởi '!' và 'Tôi' được thay thế bởi 'M'. Do đó, nó sẽ dẫn đến "strmng là m !! có thể sử dụng". Đôi khi, nhóm nhiều ký tự này cũng có thể được gọi là 'chuỗi con'.For example, Let's take the statement, "Strings are immutable". You need to replace the characters, say ['r', 'm', 'i'], with, let's take ['R', '!', 'M'], in the respective order, i.e. 'r' replaced by 'R', "M" replaced by '!' and 'i' replaced by 'M'. Hence, it will result in "StRMngs aRe M!!utable". Sometimes, this group of multiple characters can also be termed as 'SubStrings'.
  5. Loại bỏ các ký tự trong một chuỗi. Ví dụ: hãy xem xét chuỗi "gia sư fav". Bây giờ, giả sử bạn cần phải loại bỏ không gian trống ('') giữa 'fav' và 'gia sư'. Bạn có thể loại bỏ không gian trống này bằng cách thay thế nó bằng (""). Do đó, đầu ra ở đây sẽ là: "favtutor".For example, let's consider the string "Fav Tutor". Now, let's say you need to remove the blank space (' ') between 'Fav' and 'Tutor'. You can remove this blank space by replacing it with (""). Hence, the output here will be: "FavTutor".

Ở đây bạn có thể tìm hiểu cách loại bỏ khoảng trống khỏi một chuỗi trong Python.

Bạn phải tự hỏi làm thế nào chúng ta có thể & nbsp; thực hiện các thay đổi (ở đây, thay thế các ký tự) trong các chuỗi. Chuỗi là bất biến, phải không?Strings are immutable, aren't they?

Vâng, chuỗi là bất biến! Các phương thức (bạn sẽ sớm biết chúng) lấy chuỗi gốc làm đầu vào và trả về chuỗi đã thay đổi (sau khi thay thế các ký tự) làm đầu ra. Đầu ra này được lưu trữ trong một biến chuỗi khác. Do đó, chúng ta cần có một biến khác (đối tượng chuỗi) để lưu trữ đầu ra thu được. Do đó, không có thay đổi nào được thực hiện cho chuỗi ban đầu, giữ lại thuộc tính bất biến của nó.

Làm thế nào để thay thế nhiều ký tự trong một chuỗi trong Python?

Python & NBSP; cung cấp các mô -đun và phương thức khác nhau để thay thế nhiều ký tự trong một chuỗi. Bây giờ, nhiều ký tự này có thể tách biệt hoặc cùng nhau dưới dạng 'từ'. Mặc dù chúng tôi đang tập trung vào việc thay thế nhiều ký tự, các phương thức này cũng có thể được áp dụng để thay thế một ký tự duy nhất trong một chuỗi trong Python. & NBSP;

Bắt đầu nào!

01) Sử dụng phương thức thay thế ()

Python cung cấp phương thức thay thế () để xử lý các ký tự thay thế (đơn hoặc nhiều) trong một chuỗi. Phương thức thay thế & nbsp; trả về một đối tượng mới (chuỗi) thay thế các trường (ký tự) được chỉ định bằng các giá trị mới. & Nbsp;

Phương thức thay thế () lấy hai tham số làm đầu vào, thứ nhất là mẫu bạn muốn (để khớp trong chuỗi) được thay thế và tham số thứ hai là mẫu (ký tự) bạn muốn thay thế bằng. & Nbsp;

Cú pháp được sử dụng nhiều nhất để thay thế () là:

newObject = OriginalString.replace ('ký tự để thay thế', 'ký tự được thay thế bằng')

Hãy lấy một ví dụ:

# Using replace() method
string = "Bubblegum"

# replacing the 'b' character with 'B'
changed_string = string.replace("b", "B")

print("Original string: ", string)
print("New string: ", changed_string)

Output: 

Original string:  Bubblegum
New string:  BuBBlegum

Lưu ý cách 'B trong chuỗi ban đầu' Bubblegum 'được thay thế bằng' B's. Đây là một ví dụ về việc thay thế nhiều lần xuất hiện của một ký tự trong một chuỗi.

Phương thức thay thế () cũng có tham số thứ ba (tùy chọn) & nbsp; nơi bạn có thể đề cập đến số lượng & nbsp; thay thế bạn muốn thực hiện.

Đó là, nếu bất kỳ từ nào, ví dụ, "bong bóng" có nhiều hơn một lần xuất hiện của một ký tự, ở đây 'B', thì chúng ta có thể nhập tham số thứ ba là 1, trong trường hợp chúng ta chỉ cần thay thế một 'B' từ sợi dây.

Do đó, phương thức cú pháp cơ bản cho phương thức thay thế () là:

newObject = OriginalString.Repace ('ký tự để thay thế', 'ký tự được thay thế bằng, số lượng thay thế để thực hiện)

Hãy xem mã cho ví dụ này:

# Using replace() method
string = "Bubblegum"

# replacing the 'b' character with 'B'
changed_string = string.replace("b", "B", 1)

print("Original string: ", string)
print("New string: ", changed_string)

Theo mặc định, tất cả các lần xuất hiện của tham số đầu tiên được thay thế trong chuỗi.

Output:

Original string:  Bubblegum
New string:  BuBblegum

Lưu ý làm thế nào chỉ có sự xuất hiện đầu tiên của 'B' đã được thay thế bằng 'B'. Điều này & nbsp; đã xảy ra bởi vì & nbsp; số lượng thay thế thành & nbsp; thực hiện đã được đặt thành 1.

02) Sử dụng thay thế () với danh sách

Trong phương thức trên, chúng ta đã thấy việc sử dụng phương thức thay thế () để thay thế các ký tự đơn (xuất hiện đơn hoặc nhiều) bằng một ký tự khác. Phương thức thay thế () cũng có thể được sử dụng để thay thế nhiều ký tự (khác nhau) bằng một ký tự khác (giống nhau hoặc khác nhau cho mỗi ký tự).

Sử dụng For Loop: Cách làm việc phổ biến nhất với danh sách là sử dụng For A Loop. Để thay thế nhiều ký tự (giả sử khác nhau) bằng phương thức thay thế (), bạn có thể liệt kê tất cả các ký tự, để được xóa, trong danh sách. & NBSP; The most common way of working with lists is using the for a loop. To replace multiple characters (let's say different) using replace() method, you can list out all the characters, to be removed, in a list. 

Một ví dụ về cách khai báo danh sách:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
0

Bạn có thể tự hỏi, tại sao chúng tôi tạo một danh sách hoặc thậm chí sử dụng một vòng lặp khi chúng tôi có thể gọi trực tiếp thay thế () trên mỗi ký tự.

Khá đơn giản, phải không?

Không, không phải. Bạn sẽ tìm thấy lý do sau trong blog. (Vì vậy, & nbsp; để mắt đến nó!)

Sau khi khởi tạo danh sách, bạn có thể & nbsp; thay thế các ký tự được đề cập & nbsp; với cùng một ký tự (nghĩa là tất cả bởi một) hoặc với nhiều ký tự (nghĩa là một ký tự khác nhau cho mỗi ký tự).

CASE: Thay thế nhiều ký tự bằng cùng một ký tự:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
1

Bạn sẽ nhận thấy cách tôi đã sử dụng một vòng lặp for để phân tích lại chuỗi cho 'mỗi ký tự' trong danh sách, được thay thế bằng một ký tự khác (như "#"). & Nbsp;

Output:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
2

Một lần nữa, lưu ý rằng chúng tôi đã thay thế các ký tự sẽ được thay thế (các phần tử trong danh sách char_remov) bằng cùng một ký tự ('#') ở trên.

03) Sử dụng thay thế () bằng từ điển

Chúng ta cũng có thể sử dụng các ký tự khác nhau cho mỗi nhân vật được thay thế. & NBSP; Để đạt được điều này, bạn phải nhận thức được từ điển!

Từ điển trong Python là gì? A & NBSP; Từ điển là một tập hợp các thực thể cặp có giá trị chính. Đây là một loại dữ liệu khác được cung cấp bởi Python, & NBSP; cũng được coi là triển khai cấu trúc dữ liệu mảng kết hợp của Python. Chúng là có thể thay đổi và không cho phép bất kỳ bản sao nào vì một khóa chỉ có thể có một giá trị.a Dictionary is a collection of key-value pair entities. It is another data type offered by Python, also considered Python's implementation of associative array data structure. These are mutable and do not allow any duplicates since a key can only have one value.

Một từ điển được biểu diễn bởi: {}.

Một ví dụ về từ điển có thể được xem là:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
3

Trên đây là một trong những phương pháp để khai báo từ điển. Nó cũng cho thấy một trong những cách tiếp cận để có được các giá trị với sự trợ giúp của các khóa.

Output:

Bây giờ bạn đã biết từ điển là gì và cách sử dụng nó, chúng ta hãy quay lại để thay thế các ký tự trong một chuỗi. Thay vào đó, hãy xem xét cùng một ví dụ được sử dụng trước đó nhưng thay vào đó thay thế từng ký tự bằng một ký tự khác nhau. (Hãy thử thay thế chúng bằng dạng viết hoa của chúng. Điều này sẽ dễ chú ý.)

CASE: Thay thế nhiều ký tự bằng các ký tự khác nhau trong một chuỗi trong Python

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
4

Việc sử dụng từ điển đã giúp dễ dàng thay đổi từng ký tự thành một ký tự khác với sự trợ giúp của cặp giá trị khóa. Mặc dù bạn có thể sử dụng một từ điển để thay thế nhiều ký tự bằng một ký tự, nhưng việc sử dụng nó không được khuyến khích làm như vậy (vì điều đó sẽ không cần thiết).

Output:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
5

Tôi hy vọng bạn đã tìm thấy câu trả lời cho câu hỏi của chúng tôi: 'Tại sao chúng ta cần sử dụng & nbsp; một vòng lặp?'

Chà, vì chúng ta cần thay thế nhiều ký tự trong một chuỗi, nhu cầu về một vòng lặp thực sự rõ ràng. Chúng ta có thể gọi phương thức thay thế () cho mỗi ký tự được xóa, nhưng bạn sẽ lặp lại quá trình trong bao lâu? Và trong trường hợp một số lượng lớn các ký tự được thay thế, hãy gọi thay thế () trên mỗi ký tự không chỉ làm tăng độ dài của mã của bạn mà còn ảnh hưởng đến khả năng đọc của nó.

Ngoài ra, khó khăn hơn để theo dõi một danh sách dài các nhân vật được thay thế. Do đó, bằng cách liệt kê ra (hoặc tạo từ điển) cho các ký tự được thay thế, chúng tôi dễ dàng kết thúc một quá trình lặp lại dài với sự trợ giúp của một vòng lặp.

Ghi nhớ nó trong tâm trí. Nó khá cơ bản nhưng thường có thể xảy ra trong các cuộc phỏng vấn!

Phương thức thay thế () là phương thức phổ biến nhất để thay thế bất kỳ ký tự nào trong chuỗi. Bạn có thể sử dụng bất kỳ phiên bản nào ở trên để thay thế nhiều ký tự trong một chuỗi trong Python. & NBSP; Có các ký hiệu đặc biệt (như '|') mà & nbsp; cũng có thể được sử dụng với các biểu thức. Việc sử dụng các ký tự hoặc mẫu đặc biệt này để thay thế có liên quan đến các biểu thức chính quy (hoặc regex).

04) Sử dụng mô -đun lại

Python cung cấp 'mô -đun lại' để cung cấp dễ dàng & nbsp; trong khi làm việc với các biểu thức thông thường. Bạn phải biết rằng các biểu thức chính quy là một chuỗi các ký tự tạo thành một mẫu tìm kiếm. Do đó, biểu thức thường xuyên về cơ bản là các chuỗi. Bạn cũng có thể thay thế nhiều ký tự trong một chuỗi bằng sự trợ giúp của 'mô -đun lại'.

Về cơ bản có hai cách thay thế các ký tự:

  1. Sử dụng hàm sub () với các ký tự meta hoặc trình tự đặc biệt
  2. Sử dụng hàm sub () với danh sách và từ điển

Trước & nbsp; chuyển sang các phương thức này, hãy tìm hiểu về hàm sub ().

Hàm SUB () trong mô -đun RE: Mô -đun RE trong Python cung cấp hàm phụ Điều này trả về một chuỗi với & nbsp; các ký tự mới tại chỗ. Lưu ý rằng bạn cần nhập mô -đun RE để sử dụng hàm sub ().The re module in Python offers a sub() function which replaces the matched character (the character given in the string) with the given (new) character. This returns a string with the new characters in place. Note that you need to import the re module in order to use sub() function.

Hàm cú pháp cơ bản cho hàm sub () là:

Báo chí = re.sub ('gertobereplaces', 'gettertorplacewith', StringName)

Chúng ta hãy lấy một ví dụ để hiểu chức năng Sub () hoạt động như thế nào:

CASE: Thay thế một ký tự bằng một ký tự khác trong chuỗi

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
6

'T' ở đây cũng được coi là một biểu thức thông thường. & NBSP; Ngoài ra, lưu ý rằng, không giống như phương thức thay thế (), tên chuỗi được truyền dưới dạng tham số đầu vào cho hàm phụ.

Output:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
7

Hàm Sub () tìm kiếm chuỗi cho mẫu (ký tự) và sau đó thay thế khớp (mẫu) bằng ký tự mới. Nó trả về một chuỗi mới với các thay đổi được thực hiện. & NBSP; Lưu ý rằng bạn cũng có thể chỉ định số lượng thay thế xảy ra, bằng cách chuyển tham số "đếm" ở cuối. Do đó, cú pháp cơ bản của phụ sẽ là:

Báo chí = re.sub ('ký tựStobereplaces', 'gettertorePlaceWith', StringName, Count)

Bây giờ, chúng ta hãy chuyển sang thay thế nhiều ký tự bằng hàm sub (), với sự trợ giúp của các ký tự đặc biệt!

Hãy nhớ lại rằng & nbsp; các ký tự meta là các ký tự có ý nghĩa đặc biệt (ví dụ: '|' cho 'hoặc') và các chuỗi đặc biệt như '\ s' cho không gian trắng. Các ký tự meta hoặc chuỗi đặc biệt này có thể được sử dụng để thay thế nhiều ký tự trong một chuỗi.

Hãy lưu ý về ví dụ dưới đây:

CASE: Thay thế nhiều ký tự trong một chuỗi bằng một ký tự duy nhất, sử dụng trình tự đặc biệt và ký tự meta

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
8

Lưu ý rằng tôi đã sử dụng một chuỗi đặc biệt ('\ s') cũng như ký tự meta ('|') trong ví dụ trên.

Output:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
9

Đây là một cách khác để thay thế nhiều ký tự bằng hàm sub (). Nhưng cách này có thể được sử dụng cho đến khi số lượng ký tự được thay thế chỉ giới hạn ở một số ít. Giống như trước đây, chúng ta sẽ cần sử dụng một vòng lặp để làm việc với việc thay thế nhiều ký tự (nhiều hơn ít). Hàm Sub () cũng có thể được sử dụng với danh sách cũng như từ điển. & NBSP;

Hãy lấy một ví dụ về việc sử dụng hàm sub () với từ điển:

CASE: Thay thế nhiều ký tự trong một chuỗi bằng các ký tự khác nhau bằng cách sử dụng từ điển

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
0

Trình tự các ký tự (được tham chiếu với tên biến 'char' và các giá trị trong từ điển) là các biểu thức chính quy. & Nbsp;

Output:

>>> multiple_replace("(condition1) and --condition2--",
...                  {"condition1": "", "condition2": "text"})
'() and --text--'

>>> multiple_replace('hello, world', {'hello' : 'goodbye', 'world' : 'earth'})
'goodbye, earth'

>>> multiple_replace("Do you like cafe? No, I prefer tea.",
...                  {'cafe': 'tea', 'tea': 'cafe', 'like': 'prefer'})
'Do you prefer tea? No, I prefer cafe.'
5

Ngoài hàm sub (), mô -đun RE còn cung cấp hàm subn (), tương tự như hàm sub (). Sự khác biệt duy nhất là hàm subn () cũng cung cấp số lượng thay thế nó tạo trong chuỗi. Ngoài ra, hàm sub () cũng có thể được sử dụng với hàm "lambda".

Bạn nên & nbsp; thử sử dụng các chức năng ở trên. Họ có thể giúp bạn đến & nbsp; đầu ra mong muốn của bạn.

05) Sử dụng dịch () và maketrans ()

Các phương pháp được thảo luận cho đến nay liên quan đến các biểu thức thường xuyên và có thể được sử dụng với danh sách và từ điển. Tuy nhiên, Python cung cấp một phương thức khác sử dụng từ điển để ánh xạ các giá trị cũ cho các giá trị mới và do đó để thay thế nhiều ký tự trong một chuỗi.

Phương thức maketrans () tạo ra một bảng ánh xạ (từ điển) giữa ký tự gốc và sự thay thế của nó. Xem ví dụ dưới đây: See the example below:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
2

Phương thức maketrans () tạo ra một bảng (từ điển) ánh xạ các giá trị cũ với các giá trị mới.

Output:

Lưu ý rằng từ điển (được trả về bởi maketrans ()) giữ các giá trị ASCII của các ký tự, (cả hai, sẽ được thay thế và thay thế bằng).

Hàm dịch () & nbsp; chấp nhận bảng được tạo bởi maketrans () và & nbsp; tạo chuỗi được dịch. Hãy xem ví dụ dưới đây để thay thế nhiều ký tự trong một chuỗi trong Python:. Take a look at the below example to replace multiple characters in a string in Python:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
3

Output:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
4

Đây là một ví dụ khác về việc thay thế nhiều ký tự trong một chuỗi bằng từ điển. Bạn có thể sử dụng phương pháp trên cho bất kỳ trường hợp nào được đề cập ở trên.

So sánh giữa phương thức dịch () và thay thế ()

Phương thức dịch () và phương thức thay thế (), cả hai đều là các hàm được xây dựng trong python, để thay thế nhiều ký tự trong một chuỗi. Bạn có thể sử dụng một trong hai để thực hiện nhiệm vụ. Đây là so sánh cả hai phương pháp:

1. Phương thức dịch () chỉ thay thế các ký tự đơn bằng chuỗi tùy ý trong khi phương thức thay thế () cho phép thay thế các chuỗi bằng độ dài tùy ý. Ví dụ:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
5

Output:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
6

Lưu ý lỗi thu được khi gọi phương thức maketrans (). Lỗi này xảy ra do sự khác biệt về độ dài của các ký tự (hoặc số lượng ký tự) sẽ được thay thế và các ký tự được thay thế. Bây giờ, chúng ta hãy xem phương thức thay thế () hoạt động như thế nào với trường hợp:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
7

Phương thức thay thế () coi tham số đầu vào 'MIT' là toàn bộ chuỗi thay vì coi nó như một chuỗi các ký tự riêng lẻ. Ngoài ra, độ dài tùy ý của các tham số không cần phải giống nhau.

Output:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
8

Do đó, bạn sẽ nhận thấy rằng thay vì thay thế 'm', 'i', 't', phương thức thay thế () chỉ thay thế sự kết hợp của 'mit' với 'm'.

2. Phương thức dịch () có thể thực hiện thay thế "Nhiều ký tự" tại một cuộc gọi trong khi phương thức thay thế () chỉ có thể thay thế một "chuỗi đơn" cùng một lúc.

3. Phương thức dịch () có thể được sử dụng khi bạn không chắc chắn liệu & nbsp; ký tự mới (ký tự được thay thế) cũng được thay thế.

Khó khăn? Đừng lo lắng, chúng ta hãy lấy một ví dụ để & nbsp; hiểu các so sánh ở trên & nbsp;

Chẳng hạn, hãy xem xét một chuỗi, giả sử 'ABCD'. Bây giờ, bạn cần thay thế các ký tự 'A' bằng 'B', 'B' bằng 'C' và 'C' bằng 'd'.

Tóm lại, input = 'abcd' & nbsp; & nbsp; & nbsp; & nbsp; và & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Đầu ra dự kiến ​​= 'BCDD'

Hãy so sánh cả hai phương thức trên đầu vào trên:

>>> s = "I don't want to change this name:\n  Philip II of Spain"
>>> re_str_dict = {r'\bI\b': 'You', r'[\n\t ]+': ' '}
>>> multiple_replace(s, re_str_dict)
"You don't want to change this name: Philip II of Spain"
9

Lưu ý sự khác biệt giữa các đầu ra được trả về bởi cả hai phương thức.

Output:

def escape_keys(d):
    """ transform dictionary d by applying re.escape to the keys """
    return dict((re.escape(k), v) for k, v in d.items())

>>> multiple_replace(s, escape_keys(re_str_dict))
"I don't want to change this name:\n  Philip II of Spain"
0

Cả hai phương pháp tạo ra các đầu ra khác nhau! Bạn phải tự hỏi "Làm thế nào", phải không?

Điều này xảy ra vì phương thức thay thế () đã được thực hiện trong một vòng lặp, từng phương thức khác. Hãy liệt kê các thay đổi để hiểu rõ hơn:

một. Input = 'ABCD'

b. Thay thế 'A' bằng 'B' => String = 'BBCD'

c. Thay thế 'B' bằng 'C' => String = 'CCCD'

d. Thay thế 'c' bằng 'd' => 'dddd'

Do đó đầu ra = 'DDDD'

Do đó, trong trường hợp này, phương thức dịch () đáp ứng tạo ra kết quả mong đợi.

Do đó, khi so sánh cả hai phương thức, bạn sẽ nhận thấy rằng bạn nên sử dụng phương thức dịch () khi thay thế nhiều ký tự khi nó tăng chức năng. Mặc dù phương thức thay thế () có lợi ích riêng trong tối ưu hóa thời gian.

Ngoài ra, kiểm tra cách thay thế một ký tự duy nhất trong một chuỗi trong Python.

Sự kết luận

Trong bài viết này, chúng tôi đã xem xét cách sử dụng các chức năng tích hợp của Python để thay thế nhiều ký tự trong một chuỗi. Nhiệm vụ này cũng có thể được thực hiện bằng cách sử dụng các biến thể khác nhau của các vòng trên chuỗi. Chúng tôi cũng đã so sánh các phương pháp với các trường hợp sử dụng khác nhau. Tôi hy vọng bài viết này giúp bạn tìm một phương pháp phù hợp cho mã của bạn. Mã hóa hạnh phúc!