Python:
ลบตัวอักษรที่ตรงกับรูปแบบ
วิธีการ:
import re
# สตริงตัวอย่าง
text = "Hello, World! 1234"
# ลบตัวเลขทั้งหมด
no_digits = re.sub(r'\d', '', text)
print(no_digits) # ผลลัพธ์: "Hello, World! "
# ลบเครื่องหมายวรรคตอน
no_punctuation = re.sub(r'[^\w\s]', '', text)
print(no_punctuation) # ผลลัพธ์: "Hello World 1234"
# ลบสระ
no_vowels = re.sub(r'[aeiouAEIOU]', '', text)
print(no_vowels) # ผลลัพธ์: "Hll, Wrld! 1234"
ฟังก์ชันที่ฉันสร้างขึ้น
ฉันทำสิ่งนี้บ่อยพอที่จะรีแฟกทอร์มันเป็นฟังก์ชัน delete()
ง่ายๆ นี้ นี่ยังเป็นการสาธิตที่ดีของ doctests:
def delete(string: str, regex: str) -> str:
"""
>>> delete("Hello, world!", "l")
'Heo, word!'
>>> delete("Hello, world!", "[a-z]")
'H, !'
"""
return re.sub(regex, "", string)
การศึกษาลึกลงไป
การลบอักขระที่ตรงกับรูปแบบในข้อความมีรากฐานลึกซึ้งในวิทยาการคอมพิวเตอร์ ย้อนกลับไปยังเครื่องมือแรกๆ ของ Unix เช่น sed
และ grep
ใน Python, โมดูล re
ให้ความสามารถนี้ โดยใช้นิพจน์ปรกติ—เครื่องมือที่ทรงพลังและหลากหลายสำหรับการประมวลผลข้อความ
ทางเลือกอื่นๆ สำหรับโมดูล re
ประกอบด้วย:
- วิธีการสตริง เช่น
replace()
สำหรับกรณีง่ายๆ - ไลบรารีบุคคลที่สาม เช่น
regex
สำหรับรูปแบบที่ซับซ้อนและการสนับสนุน Unicode ที่ดีกว่า
ภายใต้ฝาครอบ, เมื่อคุณใช้ re.sub()
, ตัวแปลภาษา Python จะคอมไพล์รูปแบบเป็นชุดของไบต์โค้ด ซึ่งได้รับการประมวลผลโดยเครื่องจักรสถานะที่ทำการจับคู่รูปแบบโดยตรงกับข้อความนำเข้า การดำเนินการนี้อาจใช้ทรัพยากรมากสำหรับสตริงขนาดใหญ่หรือรูปแบบที่ซับซ้อน ดังนั้นการพิจารณาประสิทธิภาพเป็นสิ่งสำคัญสำหรับการประมวลผลข้อมูลขนาดใหญ่
ดูเพิ่มเติม
- เอกสารของโมดูล Python
re
: เอกสารอย่างเป็นทางการสำหรับนิพจน์ปรกติใน Python - Regular-Expressions.info: คู่มืออย่างละเอียดเกี่ยวกับนิพจน์ปรกติ
- บทเรียนจาก Real Python เกี่ยวกับ regex: การใช้งานนิพจน์ปรกติใน Python ในโลกแห่งความเป็นจริง