למה לקלל? Regex explained
מה זה RegEx?
ביטוי רגולרי (או, בקיצור, Regex) הוא רצף של תוים המגדירים דפוס (=חוקי התאמה).
ביטוי רגולרי אופייני יכיל שילוב כלשהו של תווי-מטא — תוים שיש להם משמעות מיוחדת — לצד תוים רגילים. הדפוסים ישמשו אותנו בדרך כלל למימוש אלגורתמים של חיפוש, החלפה או אימות מחרוזות.
הדפוסים האלה יכולים להיות פשוטים (למשל, נקודה היא ביטוי Regex תקין) או מורכבים וארוכים. לדוגמא, הרצף (הנאיבי) הבא מוודא כתובת מייל חוקית:
מה אנחנו יכולים לעשות עם זה?
אילו תרחישי Regex רלוונטיים לנו בתור engineers Data או מפתחי BI?
חיפוש
חיפוש מחרוזת בתור שדה טקסט גדול יותר. למשל, חיפוש תג מסוים בתוך עמוד HTML.
אימות
אימות ערכים בנתונים. לוודא שערך מסוים שקיבלנו ממשתמש, ממערכת מקור או במסד נתונים עונה על תנאים שהוגדרו מראש.
דוגמאות:
• אימות ערכים בשדות - כתובת מייל, כתובת IP ,מספר חשבון בנק וכד׳.
• אימות ששדה מפתח מכיל רק תוים הקסדצימלים.
• אימות Type Data של שדה לפני טעינה למסד נתונים (כדי שהטעינה לא תיפול).
סינון
סינון רשומות בהתבסס על תנאי מסוים. קצת יותר משוכלל מ- like או startswith.
למשל, סינון רשומות בשאילתת SQL בהתבסס על תנאי Regex.
דוגמאות:
• בחירת רשומות בטווחי IP מסויימים.
• סינון משתמשים שהגיעו מ- URL מסוים.
ניתוח תחבירי (Parsing)
ניתוח שדות טקסט וחילוץ מקטעים מתוכם.
דוגמאות:
• חילוץ שמות טבלאות משאילתות SQL.
• חילוץ תאריך משם קובץ נכנס. למשל: csv.20201202_file_incoming
ניקיון והחלפת תת-מחרווזת
החלפת חלקים משדה טקסט (replace)
דוגמאות:
• התממת נתונים — מיסוך ערכים רגישים כגון שם משתמש וסיסמא ו- Placeholders.
• החלפת תווי Whitespace (כולל רווחים, טאבים, ירידת שורה) ברווח בודד.
• ניקיון תוים לא נומריים ממספרי טלפון.
• ניקיון והאחדת שאילתות SQL .
• ביצוע למטיזציה וטוקניזציה על טקסט לפני הרצת אלגוריתמים של NLP.
יצירת שדות מחושבים
יצירת שדות חדשים בהתבסס על דפוסים בטקסט.
דוגמאות:
• סיווג וקיבוץ נתונים - סיווג סוג שאילתת SQL .למשל אם השאילתה מכילה INSERT או COPY היא כנראה חלק משלב ה- DIGEST של ה- ETL.
ואיך זה עוזר לי בעולמות ה-DI
אוקיי, סבבה. הבנתי את הרעיון הכללי, אבל איך זה קשור לכלים שאנחנו עובדים איתם? - רוב הכלים המשמשים אותנו תומכים ב- Regex (ברמה מסוימת).
דוגמאות:
ניתן לשלב Regex בשאילתות SQL .ב- Snowflake ניתן גם לכתוב פונקציות Javascript המכילות Regex ולשלב אותן בתהליכי ה- ETL או בשלבי התחקור.
רשימת פונקציות Regex הנתמכות ב- Snowflake:
ב- Tableau ניתן להוסיף שדות מחושבים או לנקות שדות קיימים באמצעות Regex.
למותר לציין שאין בעיה לשלב Regex כשאנחנו כותבים קוד (לדוגמא ב- Python)
כללי אצבע ודגשים
נראה לי מסובך. איך שומרים על שפיות בכל הברדק הזה?
כמה כללים בסיסיים שיסייעו לכם בעבודה עם Regex:
• תפסת מרובה לא תפסת - אל תנסו להגדיר את הכל בביטוי אחד ארוך. ברוב הכלים ניתן לחלק את הביטוי למספר חלקים. נסו לשמור על סיטוי קצר וקריא. השתמשו ברווחים והערות כדי לשפר את קריאות ה- Regex.
• השתמשו בכלי ולידציה. תמיד. הקפידו להשתמש בכלי שמבצע ולידציה לפי הדיאלקט שאתם צריכים.
• בדיקות, בדיקות ועוד בדיקות. הגדירו רשימה של ערכים תקינים (שאמורים להחזיר True (וערכים שגויים) שאמורים לא להתאים ל- Regex .(הריצו תמיד את הביטוי שלכם מול שתי רשימות הערכים). הקפידו לבצע Tests Regression כשאתם מבצעים שינויים ב- Regex שכבר רץ בשוטף. קל מאד לשנות ביטוי ולפגוע במשהו שהיה תקין.