Vấn đề
Bạn cần tách một chuỗi thành các trường, nhưng các dấu phân cách không nhất quán xuyên suốt chuỗi.
Giải pháp
Có nhiều cách bạn có thể tách một chuỗi hoặc các chuỗi với nhiều dấu phân cách trong Python. Cách phổ biến và dễ dàng nhất là sử dụng phương thức split(), tuy nhiên nó chỉ dành cho các trường hợp đơn giản.
re.split() linh hoạt hơn phương thức split() thông thường trong việc xử lý các tình huống chuỗi phức tạp.
Với re.split(), bạn có thể chỉ định nhiều mẫu cho dấu phân cách. Như hiển thị trong giải pháp, dấu phân cách có thể là dấu gạch ngang (-), khoảng trắng ( ), hoặc dấu phẩy (,) theo sau bởi các giá trị. Tài liệu biểu thức chính quy có thể tìm thấy tại đây.
Khi nào mẫu đó được tìm thấy, toàn bộ khớp trở thành dấu phân cách giữa các trường ở hai bên của khớp.
Chỉ trích xuất văn bản giữa các dấu phân cách (không có dấu phân cách)
Ví dụ
import re tennis_greats = 'Roger-federer, Rafael nadal, Novak Djokovic,Andy murray' """ #----------------------------------------------------------------------------- # Scenario 1 - Output the players # Input - String with multiple delimiters ( - , white space) # Code - Specify the delimters in [] #----------------------------------------------------------------------------- """ players = re.split(r'[-,\s]\s*', tennis_greats)
output
print(f" The output is - {players}")
The output is -
['Roger', 'federer', 'Rafael', 'nadal', 'Novak', 'Djokovic', 'Andy', 'murray']
Trích xuất văn bản giữa các dấu phân cách cùng với dấu phân cách
Ví dụ
import re tennis_greats = 'Roger-federer, Rafael nadal, Novak Djokovic,Andy murray' """ #----------------------------------------------------------------------------- # Scenario 2 - Output the players and the delimiters # Input - String with multiple delimiters ( - , white space) # Code - Specify the delimters between pipe (|) #----------------------------------------------------------------------------- """ players = re.split(r'(-|,|\s)\s*', tennis_greats)
output
print(f" The output is -{players}")
The output is -
['Roger', '-', 'federer', ',', 'Rafael', ' ', 'nadal', ',', 'Novak', ' ', 'Djokovic', ',', 'Andy', ' ', 'murray']