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

מדריך זה עוסק בביטויים רגולריים וכיצד ניתן להשתמש בהם בשפת התכנות של פייתון.

מה הם ביטויים רגילים?

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

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

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

תהיה הסיבה אשר תהיה, ביטויים רגולריים הם ויהיו אחד ההיבטים החשובים ביותר בתכנות שכולם צריכים לדעת עליהם.

ביטויים רגולריים: תווים ורצפים תואמים

רגקס היא שפה חדשה לגמרי בפני עצמה. מנוע regex מפרש תבניות המורכבות מכמה דמויות המצוידות במשמעויות ספציפיות. מילים בסיסיות כגון תווים אלפאנומריים תואמות את עצמן. אך תווים מורכבים כגון $, *, +, {וכו '. לסייע בהתאמה מסדר גבוה יותר.

instagram viewer

  1. כוכבית (*): תואם את התו הקודם לאפס או יותר פעמים. המשמעות המילולית של הדמות תהיה "אלמנט כפול n פעמים". לדוגמא, אם הביטוי הרגולרי הוא א ב ג*, המיתרים המותאמים יהיו ab, abc, abcc, abccc, abcccc וכו '. הביטוי [לִפנֵי הַסְפִירָה]* יתאים bc, bcbc, bcbc וכו '.
  2. פלוס (+): תואם את הדמות הקודמת פעם אחת או יותר. העבודה של + אופי דומה ל *, אבל ה + תו משמיט את התבנית אם הדמות אינה מתרחשת. לדוגמה, abc + יתאים abc, abcc, abccc וכו '. אבל לא ab.
  3. סימן שאלה (?): תואם את התו הקודם לאפס או פעם אחת. לדוגמא, התבנית א ב ג? יתאים ab ו- abc בלבד.
  4. צינור (|): משמש בינארי אוֹ מַפעִיל. תואם את אחת הדמויות שקדמו וצינור אחר הצינור. לדוגמה, א | ב יתאים או a או b.
  5. נקודה (.): תואם דמות שזהותה אינה ידועה. לדוגמה, a.c יתאים aac, abc, acc, a2c, וכן הלאה.
  6. גזר (^): תואם את הדמות הראשונה בתבנית. לדוגמה, ^ רא יתאים למילים המתחילות ב רא כגון ארנב, דביבון ואקראי.
  7. דולר ($): תואם את הדמות האחרונה בתבנית. לדוגמה, $ יתאים למילים המסתיימות ב- an כמו ואן, דן ותכנית.
  8. מקף (-): משמש להגדרת טווח תווים. לדוגמה, [0-9] יתאים לכל התווים המספריים החד-ספרתיים.

רצפים מיוחדים המשמשים בדפוסי ביטוי רגיל הם:

  1. \א: מחזירה התאמה אם התווים הבאים נמצאים בתחילת המחרוזת. לדוגמה, \ AThe יתאים למילים המתחילות ב- ה כגון The, Them, They, וכו '.
  2. \ b: מחזירה התאמה אם הדמות נמצאת בתחילת או בסוף מילה. לדוגמה, \ bmad ו מטורף \ ב יתאים למילים כגון עָשׂוּי ו נווד בהתאמה.
  3. \ B: מחזירה התאמה אם התו לא נמצא בתחילת או בסוף מילה.
  4. \ d: תואם תווים מספריים המופיעים במחרוזת. לדוגמה, /d* יתאים למספרים כמו 1, 12, 1232 וכו '.
  5. \ D: תואם תווים לא מספריים במחרוזת. / ד יתאים a, b, c, f וכו '.
  6. \ s: תואם תו רווח לבן בטקסט.
  7. \ S: תואם תו שאינו רווח בטקסט.
  8. \ w: מחזירה התאמה אם המחרוזת מכילה תווים אלפאנומריים כולל קו תחתון. לדוגמה, \ w יתאים a, b, c, d, 1, 2, 3 וכו '.
  9. \ W: מחזירה התאמה אם המחרוזת אינה מכילה תווים אלפאנומריים או קו תחתון.
  10. \ Z: תואם תווים בסוף מחרוזת. לדוגמה, סוף \ Z יתאים למילים המסתיימות ב- סוֹף כגון כיפוף, תיקון, נטייה וכו '.

שיטות פיתון לביטויים רגולריים

בפייתון, ה- מִחָדָשׁ הספרייה מספקת את כל הפונקציות והכלי עזר הדרושים ליישום regex בתוכניות שלך. אינך צריך להוריד את הספרייה באמצעות pip מכיוון שהיא מותקנת מראש עם מתורגמן ה- Python.

כדי לייבא את מִחָדָשׁ ספרייה בפייתון, הוסף את הקוד הבא לתסריט שלך:

ייבוא ​​מחדש

שים לב שבעת העברת ביטויים רגולריים בפייתון, אנו משתמשים במחרוזות גולמיות שכן הם אינם מפרשים תווים מיוחדים כגון \ n ו \ t באופן שונה.

התאמה()

ה התאמה מחדש () השיטה ב- Python מחזירה אובייקט regex אם התוכנית מוצאת התאמה בתחילת המחרוזת שצוינה. פונקציה זו לוקחת שני טיעונים בסיסיים:

התאמה מחדש (תבנית, מחרוזת)

...איפה תבנית הוא הביטוי הקבוע ו חוּט הוא הטקסט שצריך לחפש.

התבונן בקטע הקוד שלמטה.

ייבוא ​​מחדש
match = re.match (r'Word ', "משפט זה מכיל מילה")
הדפס (התאמה)

ה ר תו לפני המחרוזת מייצג מחרוזת גולמית.

תְפוּקָה:

אף אחד

הקוד הנ"ל חוזר אף אחד כי מִלָה לא היה נוכח בתחילת המחרוזת.

אם נמצא התאמה, תוכל להדפיס את ההתאמה באמצעות קְבוּצָה() שיטה השייכת לאובייקט regex.

ייבוא ​​מחדש
match = re.match (r'Word ', "קשה לקרוא את המילה")
הדפס (match.group (0))

תְפוּקָה:

מִלָה

לחפש()

ה מחקר() שיטה לוקח טיעונים דומים כמו re.match (). בעוד התאמה () מחזירה התאמות שנמצאות רק בתחילת המחרוזת, לחפש() יחזיר התאמות שנמצאו בכל אינדקס במחרוזת.

ייבוא ​​מחדש
match = re.search (r'Word ', "משפט זה מכיל מילה. קשה לקרוא את המילה. ")
הדפס (match.group (0))

שים לב שה- התאמה() ו לחפש() שיטות יחזירו התאמת תבנית אחת בלבד. בקוד הנ"ל, מִלָה מופיע פעמיים. אבל ה לחפש() הפונקציה תתאים רק למופע הראשון של המילה.

מִלָה

מצא הכל()

כפי שאתה כבר יכול לנחש, מצא הכל() השיטה מחזירה כל התאמה אפשרית במחרוזת.

ייבוא ​​מחדש
match = re.search (r'Word ', "משפט זה מכיל מילה. קשה לקרוא את המילה. ")
עבור elem במשחק:
הדפס (elem)

במקום להחזיר אובייקט regex, הפונקציה findall () מחזירה רשימה של כל ההתאמות. אתה יכול לחזור על הרשימה באמצעות עבור לולאה בפיתון.

לְפַצֵל()

אם אתה רוצה לפצל מחרוזת למיתרי משנה באמצעות תבנית כמפריד, אז לְפַצֵל() הפונקציה היא זו שאתה צריך.

ייבוא ​​מחדש
פיצול = re.split (r'and ', "המילה הזו וזה וזה שונה.")
הדפס (פיצול)

תְפוּקָה:

['המילה הזו "," כי "," זו שונה. "]

תַת()

ה תַת() השיטה מאפשרת למשתמש להחליף מילה ספציפית במקום התבנית. נדרשים הטיעונים הבאים.

re.sub (תבנית, החלפה, מחרוזת)

שקול קטע קוד זה:

ייבוא ​​מחדש
תוצאה = re.sub (r'and ',' או ', "חייבים להעניש את דייב והארי.")
הדפס (תוצאה)

תְפוּקָה:

חייבים להעניש את דייב או הארי.

לְלַקֵט()

ה re.compile () שיטה ב מִחָדָשׁ הספרייה מאפשרת למשתמש לאחסן בזיכרון גרסה מורכבת של דפוס הביטוי הרגיל. לאחר מכן, באמצעות האובייקט המהולל, המשתמש יכול לסנן במהירות את dump הטקסט שצוין עבור תבניות תואמות.

ייבוא ​​מחדש
דפוס = re.compile ('פייתון')
match = pattern.findall ("פייתון היא שפה נהדרת לכתיבת תסריטים. קל ללמוד פיתון. ")
הדפס (התאמה)

פונקציה זו משמשת בעיקר לשמירת תבניות עתירות משאבים ודורשות זמן רב להפעלה. קומפילציה ושמירה של התבנית כאובייקט מראש פותרת בעיה זו.

נצל את העוצמה של רגקס עם פייתון

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

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

אימייל
גיליון הרמאות של פייתון RegEx למתכנתים מתחילים

השתמש ברשימה זו של ביטויים רגולריים של Python כדי שתוכל להשתפר בשימוש בשפת התכנות המגוונת הזו.

קרא הבא

נושאים קשורים
  • תִכנוּת
  • תִכנוּת
  • פִּיתוֹן
על הסופר
שארמה של דיפש (41 מאמרים פורסמו)

Deepesh הוא העורך הצעיר של לינוקס ב- MUO. הוא כותב תוכן מידע באינטרנט כבר למעלה משלוש שנים. בזמנו הפנוי הוא נהנה לכתוב, להאזין למוזיקה ולנגן בגיטרה שלו.

עוד מדייפש שארמה

הירשם לניוזלטר שלנו

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

צעד אחד נוסף !!!

אנא אשר את כתובת הדוא"ל שלך בדוא"ל ששלחנו לך זה עתה.

.