מה זה RegEx?

ביטוי רגולרי (או, בקיצור, Regex) הוא רצף של תוים המגדירים דפוס (=חוקי התאמה).
ביטוי רגולרי אופייני יכיל שילוב כלשהו של תווי-מטא — תוים שיש להם משמעות מיוחדת — לצד תוים רגילים. הדפוסים ישמשו אותנו בדרך כלל למימוש אלגורתמים של חיפוש, החלפה או אימות מחרוזות.

הדפוסים האלה יכולים להיות פשוטים (למשל, נקודה היא ביטוי Regex תקין) או מורכבים וארוכים. לדוגמא, הרצף (הנאיבי) הבא מוודא כתובת מייל חוקית:

בדיקה האם כתובת מייל היא חוקית. [\w._%+-]+@[\w.-]+\.[a-zA-Z]{2,4}

מה אנחנו יכולים לעשות עם זה?

אילו תרחישי 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:

String Functions (Regular Expressions) — Snowflake Documentation

ב- Tableau ניתן להוסיף שדות מחושבים או לנקות שדות קיימים באמצעות Regex.

Become a regex regular & wrangle imperfect data
Tableau 9.0 added regular expressions to the lineup of Tableau functions. If, like me, your reaction to hearing this news was, “Awesome!”—and by “awesome” I mean “what the heck is RegEx?” then this blog post is for you!
Additional Functions
Returns a copy of the given string where the regular expression pattern is replaced by the replacement string

למותר לציין שאין בעיה לשלב Regex כשאנחנו כותבים קוד (לדוגמא ב- Python)

re — Regular expression operations — Python 3.9.1rc1 documentation

כללי אצבע ודגשים

נראה לי מסובך. איך שומרים על שפיות בכל הברדק הזה?

כמה כללים בסיסיים שיסייעו לכם בעבודה עם Regex:

תפסת מרובה לא תפסת - אל תנסו להגדיר את הכל בביטוי אחד ארוך. ברוב הכלים ניתן לחלק את הביטוי למספר חלקים. נסו לשמור על סיטוי קצר וקריא. השתמשו ברווחים והערות כדי לשפר את קריאות ה- Regex.
השתמשו בכלי ולידציה. תמיד. הקפידו להשתמש בכלי שמבצע ולידציה לפי הדיאלקט שאתם צריכים.
בדיקות, בדיקות ועוד בדיקות. הגדירו רשימה של ערכים תקינים (שאמורים להחזיר True (וערכים שגויים) שאמורים לא להתאים ל- Regex .(הריצו תמיד את הביטוי שלכם מול שתי רשימות הערכים). הקפידו לבצע Tests Regression כשאתם מבצעים שינויים ב- Regex שכבר רץ בשוטף. קל מאד לשנות ביטוי ולפגוע במשהו שהיה תקין.

קישורים נוספים ללימוד ותרגול

Regex Crossword
A crossword puzzle game using regular expressions. Earn achievements completing puzzle challenges. Easy tutorials for people new to regular expressions.
Pythex: a Python regular expression editor
Pythex is a real-time regular expression editor for Python, a quick way to test your regular expressions.
RegexOne - Learn Regular Expressions - Lesson 1: An Introduction, and the ABCs
RegexOne provides a set of interactive lessons and exercises to help you learn regular expressions