מחיקת תווים שמתאימים לדפוס

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 מקמפל את הדפוס לסדרת bytecodes, שמעובדים על ידי מכונת מצב שבוצעת תיאום דפוסים ישירות על הטקסט הקלט. פעולה זו יכולה להיות משאב כבד למחרוזות גדולות או דפוסים מורכבים, לכן שיקולי ביצועים קריטיים לעיבוד נתונים גדולים.

ראה גם