כיצד להשתמש בתחליפי מיתרים ברובי

click fraud protection

פיצול מחרוזת היא רק דרך אחת לתמרן את נתוני המחרוזת. אתה יכול גם לבצע החלפות להחלפת חלק אחד של מחרוזת במחרוזת אחרת. לדוגמה, במחרוזת דוגמא (foo, bar, baz) החלפת "foo" ב- "boo" ב הייתה מניבה "boo, bar, baz." אתה יכול לעשות זאת ועוד דברים רבים נוספים באמצעות תת ו gsub שיטה בכיתת המחרוזות.

אפשרויות רבות להחלפת רובי

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

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

חפש והחלף

השימוש הבסיסי ביותר בשיטות ההחלפה הוא להחליף מחרוזת חיפוש סטטית אחת במחרוזת החלפה סטטית אחת. בדוגמה לעיל, "foo" הוחלף ב "boo". ניתן לעשות זאת בהתרחשות הראשונה של "foo" במיתר באמצעות תת שיטה או עם כל התופעות של "foo" באמצעות gsub שיטה.

#! / usr / bin / env אודם
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
מציב ב
$ ./1.rb
foo, bar, baz
gsub $ ./1.rb
בו, בר, בז
instagram viewer

חיפוש גמיש

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

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

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

#! / usr / bin / env אודם
STDIN.each לעשות | l |
l.gsub! (/, + /, ",")
מכניס ל
סוף
gsub $ cat data.txt
10, 20, 30
12.8, 10.4,11
gsub $ cat data.txt | ./2.rb
10,20,30
12.8,10.4,11

החלפות גמישות

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

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

#! / usr / bin / env אודם
STDIN.each לעשות | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) do | n |
"% .3f"% n.to_f
סוף
l.gsub! (/, + /, ",")
מכניס ל
סוף
gsub $ cat floatdata.txt
2.215 א -1, 54, 11
3.15668e6, 21, 7
gsub $ cat floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

לא מכיר את הביטויים הרגילים?

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

המרכיב העיקרי כאן הוא ה- \ ד כיתת אופי. זה יתאים לכל ספרה, לתווים 0 עד 9. הכימות + משמש עם מחלקת התווים הספרותיים כדי לסמן שיש להתאים אחת או יותר מספרות אלה בשורה. יש לך שלוש קבוצות של ספרות, שתיים מופרדות על ידי "."והשני מופרד על ידי האות"ה"(עבור אקספקטנט).

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

שני האלמנטים האחרים הם. (נקודה) אופי וה- ה דמות. שלב את כל זה, ותקבל ביטוי רגיל (או מערכת כללים להתאמת טקסט) התואמת למספרים בצורה מדעית (כגון 12.34e56).

instagram story viewer