Python là ngôn ngữ lập trình có nhiều kiểu dữ liệu khác nhau trong đó bao gồm các chuỗi – string. Mặc dù chuỗi là một thành phần bất biến, chúng ta vẫn có thể thực hiện thao tác trên một chuỗi string sử dụng hàm split. Hàm này sẽ chia nhỏ các chuỗi lớn thành các chuỗi nhỏ hơn sử dụng các tham số khác nhau. Trong bài viết này ta sẽ tìm hiểu cách sử dụng hàm split trong Python.
I. Cắt Chuỗi Trong Python Sử Dụng Hàm Nào
Hướng dẫn cách cắt chuỗi trong python. Bạn sẽ học được cách cắt (slice) một chuỗi thành các chuỗi nhỏ hơn bằng cách dùng chức năng cắt (slice) trong python sau bài học này.
Để cắt (slice) chuỗi trong python , chúng ta sử dụng chức năng cắt (slice) trong python hay còn gọi là slice string python như sau:
Cú pháp cắt (slice) chuỗi trong python
Chúng ta sẽ chỉ định vị trí bắt đầu cắt chuỗi và vị trí kết thúc từ chuỗi ban đầu để lấy chuỗi con ra, theo cú pháp dưới đây:
str [ vị trí bắt đầu cắt : vị trí kết thúc cắt ]
Trong đó:
- str là chuỗi cần cắt
- vị trí bắt đầu cắt là index của ký tự bắt đầu cắt chuỗi
- vị trí kết thúc cắt là index của ký tự kết thúc cắt chuỗi cộng thêm 1 đơn vị
🌟 Cần chú ý do chuỗi được cắt ra không bao gồm ký tự ở vị trí kết thúc cắt, nên khi chỉ định vị trí kết thúc cắt chúng ta cần cộng thêm 1 đơn vị. Như thế, chuỗi cắt ra sẽ bao gồm cả ký tự ở vị trí kết thúc cắt.
🌟 Về cách đánh số index của ký tự trong chuỗi, bắt đầu đánh số index của ký tự ngoài cùng tay trái bằng 0, sau đó cộng thêm 1 và tiến dần về phía bên phải. Lưu ý là đánh số index bắt đầu từ 0 chứ không phải từ 1 nhé.
II. Split Trong Python Là Gì
Chuỗi trong Python đại diện cho các giá trị ký tự unicode. Python không có kiểu dữ liệu ký tự, vì vậy kiểu ký tự đơn cũng được coi là một chuỗi.
Chúng ta sử dụng các ngoặc đơn hoặc ngoặc đôi để khai báo dữ liệu. Để truy cập một chuỗi, chúng ta sử dụng chỉ mục và dấu ngoặc vuông. Vì các chuỗi là các thành phần bất biến nên chúng ta không thể thực hiện thay đổi sau khi đã khai báo chúng.
Ví dụ:
name = “Edureka” print(name[0])
Output: E
Mặc dù không thể thay đổi chuỗi sau khi thực hiện khai báo, ta vẫn có thể chia tách chuỗi string trong Python.
III. Cú Pháp Của Split() Trong Python
Hàm split() trong Python chia chuỗi theo delimeter đã cho (là space nếu không được cung cấp) và trả về danh sách các chuỗi con; nếu bạn cung cấp đối số num thì chia chuỗi thành num + 1 chuỗi con.
Cú pháp của split() trong Python:
str.split(str=””, num=string.count(str))
Chi tiết về tham số:
- str: Đây là bất kỳ phân chia chuỗi – delimeter nào, mặc định là khoảng trống.
- num: Số chuỗi con num + 1 được tạo ra.
Ví dụ sau minh họa cách sử dụng của split() trong Python.
str1 = “Line1-Python Line2-Java Line3-PHP”; print(“Test 1:”); arr1 = str1.split(); for arr in arr1: print (arr); print(“nTest 2:”); arr1 = str1.split(‘ ‘, 1); for arr in arr1: print (arr);
Chạy chương trình Python trên sẽ cho kết quả:
Test 1: Line1-Python Line2-Java Line3-PHP Test 2: Line1-Python Line2-Java Line3-PHP
IV. Hàm Join Và Split Trong Python
Hàm join() trong Python nối chuỗi các biểu diễn chuỗi của các phần tử trong dãy seq thành một chuỗi.
Cú pháp của join() trong Python:
V. 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(“AppletOrangetLemon”.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 ‘AppletOrangetLemon’. 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
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 rn 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 = “OrangenLemonnApple” 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í dụ 3: tách chuỗi chứa ký tự xuống dòng n với giá trị keepends = True
str1 = “OrangenLemonnApple” print(str1) #>> Orange #>> Lemon #>> Apple print(str1.splitlines(True)) #>> [‘Orangen’, ‘Lemonn’, ‘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ề.
VI. Tách Số Và Chữ Trong Chuỗi Python
Hướng dẫn cách tách số trong chuỗi python. Bạn sẽ học được cách tìm số trong chuỗi python cũng như các phương pháp tách số trong chuỗi bằng cách sử dụng Regular Expression trong Python sau bài học này.
Chúng ta có 5 phương pháp sử dụng Regular Expression để tìm số trong chuỗi python cũng như tách số trong chuỗi python như sau:
- Hàm số re.findall() : tìm và tách số trong chuỗi python dưới dạng một list
- Hàm số re.findall() : tìm và tách dãy số trong chuỗi python dưới dạng một list
- Hàm số re.sub() : tìm và tách số trong chuỗi python dưới dạng một chuỗi
- Hàm số re.search(): tìm và tách số đầu tiên trong chuỗi python
- Hàm số re.search(): tìm và tách dãy số đầu tiên trong chuỗi python
Regular Expression trong Python
Regular Expression trong Python, hay còn gọi là biểu thức chính quy với cách viết tắt là RegEx trong python, là một phương thức mô phỏng một chuỗi ký tự theo những quy tắc cú pháp nhất định. Chúng ta thường sử dụng Regular Expression khi muốn tìm kiếm , lấy ra hoặc thay thế một chuỗi ký tự có cấu trúc chỉ định trong Python.
Đây là một kỹ thuật thường được sử dụng khi xử lý một lượng lớn văn bản trong một chương trình.
Để sử dụng regular expression trong python, chúng ta cần sử dụng tới module re bằng cách import re trong python vào chương trình.
Và nếu bạn biết cách sử dụng, bạn có thể dễ dàng tìm kiếm cũng như tách số trong chuỗi python bằng regular expression trong python.
import re trong python
Chúng ta sử dụng lệnh import để import re trong python và có thể sử dụng tất cả các hàm số và phương thức được cài sẵn của nó trong chương trình như sau:
import re
Sau đây, chúng ta sẽ cùng tìm hiểu các cách tách số trong chuỗi bằng cách sử dụng các hàm trong regex python.
Tách số trong chuỗi python dưới dạng một list | hàm re.findall Python
Chúng ta tìm số trong chuỗi python cũng như tách từng số trong chuỗi đó và thu về kết quả dưới dạng một list bằng cách sử dụng hàm re.findall() trong module re trong python.
Cú pháp sử dụng hàm re.findall() để tách số trong python như sau:
re.findall ( r’d’ , str)
Trong đó:
- re.findall dùng để gọi hàm
- str là chuỗi cần tách số ra.
- r’d’ là một chuỗi thô được sử dụng như mẫu RegEx trong hàm, có tác dụng biểu thị một chữ số.
Ví dụ cụ thể, chúng ta tách số trong chuỗi python dưới dạng một list như sau:
import re s1 = ‘1ab23cdef456′ m1 = re.findall(r’d’, s1) print(m1) #>> [‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’] s2 = ‘Thứ 6 ngày 25 tháng 6 năm 2021, 21:30′ m2 = re.findall(r’d’, s2) print(m2) #>> [‘6’, ‘2’, ‘5’, ‘6’, ‘2’, ‘0’, ‘2’, ‘1’, ‘2’, ‘1’, ‘3’, ‘0’]
Lưu ý là chúng ta tách số ra từ chuỗi ban đầu và lấy kết quả, chứ không làm thay đổi chuỗi ban đầu nhé.
import re s = ‘1 con gà 2 con vịt’ print(s) m = re.findall(r’d’, s) print(m) print(s) #>> 1 con gà 2 con vịt #>> [‘1’, ‘2’] #>> 1 con gà 2 con vịt
Sau khi tách các số từ chuỗi và thu về kết quả dưới dạng list, chúng ta có thể nối các phần tử trong list và chuyển kết quả về dạng chuỗi bằng cách sử dụng hàm join trong python. Ví dụ:
r = ”.join(m) print(r) #>> 12
Tách dãy số trong chuỗi python dưới dạng một list | hàm re.findall() Python
Ở phần trên chúng ta đã biết cách tìm số trong chuỗi python cũng như tách từng số trong chuỗi và thu về kết quả dưới dạng một list rồi. Với cách này, thì các số tồn tại trong chuỗi sẽ được coi là riêng biệt và chúng cũng sẽ được tách riêng rẽ với nhau. Ví dụ như dãy ‘2021’ sẽ được tách ra thành ‘2’,’0’,’2’,’1’.
Tuy nhiên cũng có những trường hợp mà chúng ta cần tìm cũng như tách và thu về từng dãy số trong chuỗi, ví dụ như tách năm, tháng , ngày ra khỏi chuỗi chẳng hạn. Khi đó, chúng ta cũng sử dụng hàm re.findall() python và thay thế mẫu RegEx từ r’d’ sang r’d+’ như sau.
re.findall ( r’d+’ , str)
Ví dụ cụ thể, chúng ta tách dãy số trong chuỗi python dưới dạng một list như sau:
import re s = ‘Thứ 6 ngày 25 tháng 6 năm 2021, 21:30′ m = re.findall(r’d+’, s) print(m) #>> [‘6′, ’25’, ‘6’, ‘2021’, ’21’, ’30’]
Sau đó, chúng ta có thể truy cập phần tử trong list qua index, và thu về kết số mong muốn. Ví dụ như chúng ta lấy số ngày, tháng, năm từ list kết quả ở trên như sau:
print(“Ngày”,m[1]) print(“Tháng”,m[2]) print(“Năm”,m[3]) #>> Ngày 25 #>> Tháng 6 #>> Năm 2021
Tách số trong chuỗi python dưới dạng một chuỗi | hàm re.sub() Python
Chúng ta tìm số trong chuỗi python cũng như tách số trong chuỗi đó và thu về kết quả dưới dạng một chuỗi bằng cách sử dụng hàm re.sub() trong module re trong python.
Hàm re.sub() trong Python vốn được sử dụng để tìm một chuỗi ký tự có định dạng chỉ định và thay thế chuỗi đó bằng một chuỗi khác. Ứng dụng re.sub(), chúng ta có thể tìm ra tất cả các ký tự trong chuỗi, sau đó xóa hết chúng đi. Kết quả sẽ chỉ còn chữ số sẽ ở lại, qua đó chúng ta có thể tách số trong chuỗi python.
Cú pháp sử dụng hàm re.sub() để tách số trong python như sau:
re.sub ( r’D’ , ”, str)
Trong đó:
- re.sub dùng để gọi hàm
- str là chuỗi cần tách số ra.
- r’D’ là một chuỗi thô được sử dụng như mẫu RegEx trong hàm, có tác dụng biểu thị một ký tự.
- Ký tự trắng ” dùng để thay thế các ký tự tồn tại trong chuỗi str
Ví dụ cụ thể, chúng ta tách số trong chuỗi python dưới dạng một chuỗi như sau:
import re s1 = ‘1ab23cdef456′ m1 = re.sub(r’D’,”, s1) print(m1) #>> 123456 s2 = ‘Thứ 6 ngày 25 tháng 6 năm 2021, 21:30′ m2 = re.sub(r’D’,”, s2) print(m2) #>> 6256202121Tách số đầu tiên trong chuỗi python | hàm re.search() python<br ></br >30
Lưu ý là chúng ta tách số ra từ chuỗi ban đầu và lấy kết quả, chứ không làm thay đổi chuỗi ban đầu nhé.
import re s = ‘1 con gà 2 con vịt’ print(s) m = re.sub(r’D’,”, s) print(m) print(s) #>> 1 con gà 2 con vịt #>> 12 #>> 1 con gà 2 con vịt
Tách số đầu tiên trong chuỗi python | hàm re.search() python
Chúng ta tìm và tách số đầu tiên xuất hiện trong chuỗi python bằng cách sử dụng hàm re.search() trong module re trong python.
Hàm re.search() trong Python vốn được sử dụng để tìm một chuỗi ký tự có định dạng chỉ định và trả về kết quả khớp đầu tiên. Ứng dụng re.search(), chúng ta có thể tìm và tách ra số đầu tiên trong chuỗi python.
Cú pháp sử dụng hàm re.search() để tách số trong python như sau:
re.search ( r’d’ , str)
Trong đó:
- re.search dùng để gọi hàm
- str là chuỗi cần tách số ra.
- r’d’ là một chuỗi thô được sử dụng như mẫu RegEx trong hàm, có tác dụng biểu thị một chữ số.
Lưu ý là kết quả của Hàm re.search() trong Python không phải là chuỗi kết quả mà là một match object chứa chuỗi đó. Để lấy ra chuỗi kết quả ra từ trong match object, chúng ta sẽ cần sử dụng thêm phương thức group() trong Python.
Ví dụ cụ thể, chúng ta tách số đầu tiên trong chuỗi python như sau:
import re s1 = ‘1ab23cdef456′ m1 = re.search(r’d’, s1) print(m1) #>> <re.Match object; span=(0, 1), match=’1′> print(m1.group()) #>> 1 s2 = ‘Thứ 6 ngày 25 tháng 6 năm 2021, 21:30′ m2 = re.search(r’d’, s2) print(m2.group()) #>> 6
Tách dãy số đầu tiên xuất hiện trong chuỗi python | hàm re.search() python
Tương tự như với cách tách số đầu tiên xuất hiện trong chuỗi, chúng ta cũng sử dụng hàm re.search() để tìm và tách dãy số đầu tiên xuất hiện trong chuỗi python. Khi đó, chúng ta thay thế mẫu RegEx sử dụng trong hàm re.search() từ r’d’ sang r’d+’ như sau.
re.search ( r’d+’ , str)
Lưu ý là kết quả của Hàm re.search() trong Python không phải là chuỗi kết quả mà là một match object chứa chuỗi đó. Để lấy ra chuỗi kết quả ra từ trong match object, chúng ta sẽ cần sử dụng thêm phương thức như start(), end(), span(), group() trong Python.
Ví dụ cụ thể, chúng ta tách dãy số đầu tiên trong chuỗi python như sau:
import re s = ‘Năm 2021, thứ 6 ngày 13 21:30′ m = re.search(r’d+’, s) print(m) #>> <re.Match object; span=(4, 8), match=’2021′> print(m.group()) #>> 2021
Sau đó, chúng ta có thể lấy vị trí bắt đầu và kết thúc của dãy số trong chuỗi bằng cách dùng phương thức start() và end() như sau:
#Lấy vị trí xuất hiện của dãy số print(m.start()) #>> 4 #Lấy vị trí kết thúc của dãy số print(m.end()) #>> 8