Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

จะแยกสตริงบนตัวคั่นหลายตัวด้วย Python ได้อย่างไร


ปัญหา

คุณต้องแยกสตริงออกเป็นช่องต่างๆ แต่ตัวคั่นไม่สอดคล้องกันตลอดทั้งสตริง

วิธีแก้ปัญหา

มีหลายวิธีที่คุณสามารถแยกสตริงหรือสตริงของตัวคั่นหลายตัวใน python วิธีที่ง่ายที่สุดและง่ายที่สุดคือการใช้วิธี split() อย่างไรก็ตาม มีไว้เพื่อจัดการกับกรณีทั่วไป

re.split() is more flexible than the normal `split()` method in handling complex string scenarios.

ด้วย re.split() คุณสามารถระบุรูปแบบได้หลายรูปแบบสำหรับตัวคั่น ตามที่แสดงในโซลูชัน ตัวคั่นคือ ahyphen(-) หรือ whitespace( ) หรือ comma(,) ตามค่า เอกสารนิพจน์ทั่วไปสามารถพบได้ที่นี่

เมื่อใดก็ตามที่พบรูปแบบนั้น การจับคู่ทั้งหมดจะกลายเป็นตัวคั่นระหว่างฟิลด์ที่อยู่ด้านใดด้านหนึ่งของการแข่งขัน

แยกเฉพาะข้อความระหว่างตัวคั่น (ไม่มีตัวคั่น)

ตัวอย่าง

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)

ผลลัพธ์

print(f" The output is - {players}")

ผลลัพธ์คือ -

['Roger', 'federer', 'Rafael', 'nadal', 'Novak', 'Djokovic', 'Andy', 'murray']

แยกข้อความระหว่างตัวคั่นและตัวคั่น

ตัวอย่าง

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)

ผลลัพธ์

print(f" The output is -{players}")

ผลลัพธ์คือ -

['Roger', '-', 'federer', ',', 'Rafael', ' ', 'nadal', ',', 'Novak', ' ', 'Djokovic', ',', 'Andy', ' ', 'murray']