התקשרו אלינו: 052-2928949
ימים א'-ה' בין השעות 9:00-17:00

התקשרו אלינו: 052-2928949 א-ה 9:00-17:00

חילוץ נתונים מתוך טקסט בעזרת REGEXEXTRACT

אקסל 365

חילוץ נתונים מתוך טקסט בעזרת REGEXEXTRACT

אקסל 365

במאמרים הקודמים, כאן וכאן, נחשפנו ל REGEX והכרנו את אבני הבניין המרכיבות אותו.
במאמר הזה נלמד על הפונקציה REGEXEXTRACT שמיועדת לשלוף מתוך טקסט מחרוזות שעונות על הדפוס הרצוי.

התחביר הבסיסי של הפונקציה:

=REGEXEXTRACT(text, תבנית)

כלומר – מהו הטקסט שממנו נרצה לחלץ את הנתונים, ומהי התבנית שעל פיה נחלץ אותם.
מעבר לכך יש עוד שני אופרטורים אופציונליים, כשהראשון קובע האם נחזיר את ההתאמה הראשונה שנמצא, או את כל ההתאמות,
והשני מאפשר לנו להחליט האם אנחנו מעוניינים בהתאמה תלוית רישיות או לא.

בואו נראה דוגמה:

קיבלנו במייל טקסט עמוס מידע, שממנו נרצה לשלוף רק את המק"טים:
"ניתוח המכירות הצביע על עלייה חדה בפריטים הבאים: ABC-12fg ו־TRX-45mn, במיוחד באזור הצפון.
לעומת זאת, פריטים כמו ZKX-91lp לא זכו לביקוש דומה."

מה הבעיה בטקסט?

בתוך גוף ההודעה מופיע ניתוח המכירות, ובתוכו נמצאים גם מספרי מק"טים, אבל הטקסט מגיע כמשפט חופשי, ללא פורמט קבוע לטקסט וללא מיקום קבוע עבור המק"טים.
עם זאת, מכיוון שלמק"טים עצמם כן יש פורמט קבוע:
3 אותיות גדולות באנגלית, אחריהן מקף, אחריו 2 ספרות, ואחריהן עוד שתי אותיות קטנות באנגלית,
נוכל לזהות אותו, ולכתוב תחביר REGEX שידע לשלוף אותם מתוך הטקסט.

נבנה את התחביר שלב־שלב משמאל לימין
נחפש שלוש אותיות גדולות

[A-Z]{3}

אחר כך נאתר מקף רגיל:
לאחר מכן – שתי ספרות

[0-9] {2}

ולבסוף שתי אותיות קטנות

[a-z]{2}

ועכשיו נחבר את הכול לרצף אחד:

[A-Z]{3}-[0-9]{2}[a-z]{2}

וזו התבנית המלאה שמתארת את מבנה המק”ט.

כתיבת הפונקציה

בשלב הזה כשיש לנו את התחביר, נשלב אותו בתוך הפונקציה, ולא נשכח להקיף אותו במרכאות כפולות:

=REGEXEXTRACT(A2,"[A-Z]{3}-[0-9]{2}[a-z]{2}")

התוצאה שנקבל תהיה המופע הראשון, שבו הפונקציה נתקלת בתבנית הרצויה, ובמקרה שלנו:
ABC-12fg, בלי תלות במיקום של המק"ט בתוך הטקסט.

אבל רגע, במקרה שלנו יש יותר ממק”ט אחד

כברירת מחדל, הפונקציה REGEXEXTRACT שולפת את המופע הראשון. כדי לשלוף את כל המופעים, נשתמש בפרמטר השלישי, שהוא פרמטר אופציונלי,
שמאפשר לנו לשלוף את כל ההתאמות הקיימות:

כך נראית הפונקציה:

=REGEXEXTRACT(A1,"[A-Z]{3}-[0-9]{2}[a-z]{2}",1)

וכך נראית התוצאה:

אם נרצה להציג הכל בתא אחד, נוכל להשתמש בפונקציה TEXTJOIN:

=TEXTJOIN(", ",,REGEXEXTRACT(A1,"[A-Z]{3}-[0-9]{2}[a-z]{2}",1))

וזו התוצאה שתתקבל:

נקודות שחשוב לשים אליהן לב:

  • התבנית תמיד חייבת להיכתב בתוך גרשיים כפולים.
  •  אם יש סיכוי שהטקסט לא מכיל תבנית מתאימה – השתמשו ב־IFERROR כדי להימנע משגיאות. לדוגמה:

    =IFERROR(REGEXEXTRACT(A1,"[A-Z]{3}-[0-9]{2}[a-z]{2}"),"")

  • ניתן להפנות את הפונקציה לטווח שלם, למשל A2:A100, ולחלץ את המק"טים מכל שורה.

 

דילוג לתוכן