-
הרבה פעמים אני צריך לשלוף מחרוזות מתוך טקסט, וכמובן יש כמה דרכים לעשות את זה, והמטרה היא לכתוב את הרג'קס הכי מדויק והכי קצר שיעשה את העבודה.
לדוגמא, אם אני רוצה לשלוף מכאן את השם משתמש והסיסמא<body> <p> the username is<span>XXX</span> <br> the password is<span>YYY</span> </p> </body>
אפשר לכתוב רג'קס כזה
<body> <p> the username is<span>(.*)<\/span> <br> the password is<span>(.*)<\/span> <\/p> <\/body>
אבל זה מיותר כי אפשר גם לעשות ככה וזה יהיה אותו דבר
username.*<span>(.*)<\/span>.*password .*<span>(.*)<\/span>
ואפשר עוד יותר לצמצם.
האם קיים שירות אוטומטי שבונה את הרג'קס הכי קצר ומדויק, לפי מה שרוצים לשלוף?
תודה
-
@dovid אמר בבניית רג'קס אוטומטית:
בעצם זה למידת מכונה קלאסית, כי הדרך היחידה להסביר למחשב למה בחרו את הטקסט המסויים זה ע"י כמה דוגמאות והבנת המכנה המשותף.
גם אני חשבתי כן בהתחלה. אבל אם הצורך מאופיין בצורה טובה אולי יש מקום לאלגוריתם מתמטי. עיין גם בלינק שהבאתי מסטאק. זה באמת די מזכיר את מה שאקסל לומדים את הנוסחא מתוך דוגמאות, אבל אולי במקרה הזה זה יכול להיות יותר פשוט.
-
@dovid אמר בבניית רג'קס אוטומטית:
@שואף הניסוח המדוייק הוא I do not want to learn regular expressions.
הצחקת אותי.
מי שלא מבין רג'קס כמו שצריך, לא יעזור לו שום אוטומציה.
רק הצעתי שמי שכבר מכיר, ויידע להבחין בין ההצעות של המכונה, יכול לחסוך לו זמן להשתמש בכזה שירות, במקום כל פעם לשבת על האותיות הקטנות ולהסתבך איפה זה נתקע.חשבתי על זה עוד קצץ, אני עכשיו משווה אלף טפסים ושולף מהם מידע, ב"ה סיימתי כבר לבנות את הPATTERN, ואין שום שירות שהיה יכול לכתוב אותו לבד, בלי לעבור על כמה טפסים ולהבין מה רוצים לקחת ומה לא מעניין.
מה שהיה מעניין, זה שירות שמכניסים בתוכו כמה טקסטים, והוא ינתח לבד מה השתנה ומה הPATTERN כדי לשלוף את השינוי. זה יהיה ממש מדהים.
למעשה יש כבר כל מיני כלים שמשווים הבדלים בין טקסטים, כך שהבסיס כבר קיים. -
@שואף אגב הביטוי הראשון שכתבת הוא הכי יעיל מן הסתם מבחינת המחשב, רק שכנראה הוא רגיש מידי לשינויים (די ברווח אחד והוא לא ימצא).
כנראה שאתה בעצם מחפש ביטוי שיהיה כמה שפחות תלוי בשינויים סביבתיים לא משמעותיים.
אתה עצמך צריך דוגמאות רבות להבין איפה אתה יכול ליפול, למשל הביטוי האחרון שלך ייכשל אם בקלט מופיעה עוד פעם המילה username או password. -