Tách chuỗi trong python | Laptrinhcanban.com

Tách chuỗi trong python

Hướng dẫn cách tách chuỗi trong python. Bạn sẽ học được cách tách chuỗi trong python bằng các phương thức có sẵn như split và splitlines trong bài viết này.

Tách chuỗi trong python bằng phương thức split

Chúng ta sử dụng phương thức split để tách chuỗi trong python bằng một ký tự phân cách và thu về kết quả là một list có các phần tử là các chuỗi nhỏ vừa được tách ra, với cú pháp sau đây:

str.split(sep, maxsplit)

Trong đó :

  • sep (viết tắt của separator) là ký tự phân cách dùng để tách chuỗi str ban đầu ra các chuỗi nhỏ. Nếu không chỉ định thì python mặc định sep là ký tự trống.
  • maxsplit là số lần tách lớn nhất. Nếu không chỉ định thì python mặc định số lần tách là vô hạn.

Cách sử dụng phương thức split thực tiễn giống như ví dụ sau:

Tách chuỗi trong python bằng phương thức split rút gọn

Chúng ta rút gọn các đối số sep và maxsplit như cú pháp dưới đây

str.split()

Ví dụ 1

print("My First Love".split())
#>> ['My', 'First', 'Love']

Ở ví dụ này, ký tự phân tách được rút gọn nên python mặc định nó là ký tự trống. Sau khi tách chuỗi 'My First Love' bằng ký tự trống, một list mới được tạo ra có phần tử là 3 chuỗi nhỏ thu về là My, First và Love .

Ví dụ 2

print("  Next  Page  ".split())
#>> ['Next', 'Page']

Ở ví dụ thứ hai, chúng ta sẽ tách chuỗi ' Next Page ' có cấu trúc _ _ Next _ _ Page_ _ , với mỗi ký tự _ đại diện cho một ký tự trống ' 'cho dễ nhìn.

Ở đây ký tự phân tách cũng được rút gọn và chúng ta cũng dùng ký tự trống để tách chuỗi ' Next Page '. Tuy nhiên khi chúng ta dùng phương thức split mà không chỉ định ký tự phân tách thì các ký tự trống liên tiếp sẽ chỉ được coi là một ký tự trống.

Ngoài ra ký tự trống ở đầu và cuối của chuỗi cũng sẽ được bỏ qua khi chúng ta dùng phương thức split mà không chỉ định ký tự phân tách.

Do trong chuỗi ' Next Page ' tồn tại hai ký tự trống liên tiếp nhau ở giữa chuỗi , nên hai ký tự trống này chỉ được coi là một ký tự trống và được dùng để tách chuỗi. Ngoải ra, trong chuỗi cũng tồn tại các ký tự trống ở đầu và cuối chuỗi, nên các ký tự trống này sẽ bị bỏ qua.
Kết quả, một list mới được tạo ra có phần tử chỉ là 2 chuỗi nhỏ là 'Next' và 'Page' mà thôi.

Ví dụ 3

print("Apple\tOrange\tLemon".split())
#>> ['Apple', 'Orange', 'Lemon']

Ở ví dụ thứ ba, chúng ta đã dùng chuỗi thoát \t để biểu diễn ký tự trống ' ' tạo bởi tab trong chuỗi 'Apple\tOrange\tLemon'. Do đó chuỗi này cũng sẽ được tách bằng ký tự trống, và một list mới được tạo ra có phần tử là 3 chuỗi nhỏ thu về là Apple,Orange và Lemon.

※ Bạn có thể tìm hiểu thêm về chuỗi thoát trong bài Cách sử dụng chuỗi thoát escape sequence trong python.

Tách chuỗi trong python bằng phương thức split chỉ định ký tự phân cách

Chúng ta chỉ định ký tự phân cách sep như cú pháp dưới đây

str.split(sep)

Chúng ta có thể chỉ định sep là một ký tự, hay một chuỗi ký tự đều được.

Ví dụ 1

print("Orange,Lemon,Apple".split(","))
#>> ['Orange', 'Lemon', 'Apple']

print("Red*-*Blue*-*Green".split("*-*"))
#>> ['Red', 'Blue', 'Green']

Trong hai ví dụ trên, chúng ta đã dùng một ký tự hoặc một chuỗi ký tự để tách chuỗi ban đầu ra các chuỗi nhỏ và tạo ra một list mới chứa chúng.

Ví dụ 2

print("  Next  Page  ".split(" "))
#>> ['', '', 'Next', '', 'Page', '', '']

Hãy chú ý vào ví dụ 2 này. Mặc dù chuỗi ' Next Page ' có chứa các ký tự trống liên tiếp ' ' cũng như ký tự trống ở đầu và cuối chuỗi, nhưng trong trường hợp chúng ta chỉ định ký tự phân cách thì kết quả sẽ rất khác so với khi không chỉ định ký tự phân cách.

Nếu có chỉ định ký tự phân cách như trên, các ký tự trống liên tiếp sẽ được coi như ký tự riêng biệt chứ không bị coi là một ký tự trống như với trường hợp không chỉ định ký tự phân cách. Và các ký tự trống ở đầu và cuối chuỗi cũng sẽ không bị bỏ qua khi xử lý. Do đó, chuỗi ' Next Page ' sẽ được chia ra ra các chuỗi nhỏ là ' ', ' ', Next, ' ' , Page và ' ' như kết quả ở trên.

Hãy cùng xem thêm một vài trường hợp khác như dưới đây:

print("Next Page".split(" "))
#>> ['Next', 'Page']

print("Next Page".split(" "))
#>> ['Next', '', 'Page']

print("Next Page".split(" "))
#>> ['Next', '', '', 'Page']

print(" Next Page ".split(" "))
#>> ['', 'Next', 'Page', '']

Tách chuỗi trong python bằng phương thức split chỉ định số lần tách lớn nhất

Chúng ta chỉ định ký tự phân cách lớn nhất maxsplit như cú pháp dưới đây

str.split(maxsplit)

Khi đó chuỗi sẽ được tách với số lần lớn nhất bằng với maxsplit, như các ví dụ dưới đây:

print("A B C D E".split(" "))
#>> ['A', 'B', 'C', 'D', 'E']

print("A B C D E".split(" ", 1))
#>> ['A', 'B C D E']

print("A B C D E".split(" ", 2))
#>> ['A', 'B', 'C D E']

print("A B C D E".split(" ", 3))
#>> ['A', 'B', 'C', 'D E']

print("A B C D E".split(" ", 4))
#>> ['A', 'B', 'C', 'D', 'E']

print("A B C D E".split(" ", 8))
#>> ['A', 'B', 'C', 'D', 'E']

Lưu ý ở ví dụ cuối cùng, chúng ta đã chỉ định maxsplit lớn hơn số ký tự có trong chuỗi cần tách. Mặc dù có thể chỉ định maxsplit vô hạn, nhưng python cũng chỉ có thể cắt ra số chuỗi lớn nhất chính bằng độ dài chuỗi đó mà thôi.

Tách chuỗi trong python bằng phương thức splitlines

Chúng ta sử dụng phương thức splitlines để tách chuỗi trong python bằng một ký tự xuống dòng nếu như ký tự xuống dòng này tồn tại trong chuỗi, và thu về kết quả là một list có các phần tử là các chuỗi nhỏ vừa được tách ra, với cú pháp sau đây:

str.splitlines([keepends])

Các ký tự xuống dòng sẽ không được bao gồm trong danh sách kết quả trừ khi chúng ta chỉ định giá trị keepends = True

Các ký tự trong chuỗi được coi là ký tự xuống dòng như bảng sau đây:

\n xuống dòng
\r quay về đầu dòng
\r\n xuống dòng + quay về đầu dòng
\v or \x0b Tab thẳng
\f or \x0c ngắt trang
\x1c ngắt tệp
\x1d Ngắt nhóm
\x1e Ngắt bản ghi
\x85 xuống dòng (mã điều khiển C1)
\u2028 ngắt dòng
\u2029 Phân cách đoạn văn

Hãy cùng xem vài ví dụ đơn giản sau đây:
Ví dụ 1: tách chuỗi chứa ký tự xuống dòng \n

str1 = "Orange\nLemon\nApple"
print(str1)
#>> Orange
#>> Lemon
#>> Apple

print(str1.splitlines())
#>> ['Orange', 'Lemon', 'Apple']

Ví dụ 2: tách chuỗi nhiều dòng tạo bởi dấu nháy tam """

str2 = """\
Hello
My name is Kiyoshi
Thank you"""

print(str2)
#>> Hello
#>> My name is Kiyoshi
#>> Thank you

print(str2.splitlines())
#>> ['Hello', 'My name is Kiyoshi', 'Thank you']

Trong ví dụ này, chúng ta tách một chuỗi nhiều dòng tạo bởi dấu nháy tam, và ở phần đầu chuỗi có chứa cả chuỗi thoát \. Bạn có thể thấy cả chuỗi thoát \ lẫn chỗ xuống dòng trong chuỗi nhiều dòng đều được tách ra như nhau.
※ Về chuỗi nhiều dòng tạo bởi dấu nháy tam, bạn có thể tham khảo tại Chuỗi nhiều dòng trong python

Ví dụ 3: tách chuỗi chứa ký tự xuống dòng \n với giá trị keepends = True

str1 = "Orange\nLemon\nApple"
print(str1)
#>> Orange
#>> Lemon
#>> Apple

print(str1.splitlines(True))
#>> ['Orange\n', 'Lemon\n', 'Apple']

Bạn có thể thấy khi chỉ định giá trị keepends = True thì ký tự xuống dòng như \n sẽ được bao gồm trong danh sách kết quả trả về.

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách tách chuỗi trong python bằng các phương thức có sẵn như split, splitlines rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về python trong các bài học tiếp theo.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.