Whatsup - לינוקס, תוכנה חופשית וקוד פתוח בעברית

תיכנות בלינוקס - הכוונה עם Regex שעובד עם search ופחות עם findall

COM64 - 17/05/2021 - 14:13
נושא ההודעה: הכוונה עם Regex שעובד עם search ופחות עם findall
הי, אני מנסה למצא כתובות IP חוקיות בתוך טקסט, ה-patern הבא עושה את העבודה כשאני משתמש ב-re.search:
קוד:
((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)


לעומת זאת כשאני מנסה למצא את כל הכתובות בבמחרוזה נתונה על ידי שימוש ב-re.findall, אני מקבל פלט לא רלוונטי:

קוד:
re.search(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", "192.168.0.1 10.0.0.1")
<re.Match object; span=(0, 11), match='192.168.0.1'>
re.findall(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", "192.168.0.1 10.0.0.1")
[('0.', '0', '1'), ('0.', '0', '1')]


כותב בפייתון אם זה רלוונטי.
Anonymous - 17/05/2021 - 15:09
נושא ההודעה:
זה נראה שהוא לא מסתדר טוב עם ה {3} (ההנחיה לחפש שלוש פעמים)

קוד:

>>> re.findall(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){1}", "192.168.0.1 10.0.0.1")
[('192.', '192'), ('168.', '168'), ('0.', '0'), ('10.', '10'), ('0.', '0'), ('0.', '0')]



קוד:

>>> re.findall(r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){2}", "192.168.0.1 10.0.0.1")
[('168.', '168'), ('0.', '0')]


זה מעניין, למרות שאם המטרה אבטחת מידע - לבדוק שמה שנתקבל הוא באמת ip
לא עדיף לעשות split
ואז לבדוק שהרווח הוא ספייס ובין הנקודות יש רק מספרים?
COM64 - 17/05/2021 - 15:34
נושא ההודעה:
אם אני מבין אותך נכון, אני מוודא שהכתובת חוקית, כלומר לא מופיע לדוגמה 256.
Anonymous - 17/05/2021 - 19:26
נושא ההודעה:
כן
Anonymous - 17/05/2021 - 19:35
נושא ההודעה:
כל מה שקשור אבטחת מידע אני תמיד מעתיק מאן שהוא- על פני לכתוב לבד,
אני מניח של ip וולידציה אפשר להעתיק מפו

https://www.tutorialspoint.com/validate-ip-address-in-python

לדברים יותר מורכבים - עדיף סיפריות מוכנות של anti-semi
COM64 - 18/05/2021 - 16:22
נושא ההודעה:
Anonymous :
כל מה שקשור אבטחת מידע אני תמיד מעתיק מאן שהוא- על פני לכתוב לבד,
אני מניח של ip וולידציה אפשר להעתיק מפו

https://www.tutorialspoint.com/validate-ip-address-in-python

לדברים יותר מורכבים - עדיף סיפריות מוכנות של anti-semi


מה שאני מחפש זה Regex שמזהה כתובת IP תקינה, כלומר רצף של 4 מספרים בין 0 ל-255 מופרדים על ידי 3 נקודות.
בקישור שצרפת אני יכול להזין String ולקבל תשובה אם הוא תקין ככתובת IP.
mksoft - 18/05/2021 - 16:50
נושא ההודעה:
עטוף הכל בסוגריים, אז התוצאה הראשונה של כל tuple ברשימה ש-findall תחזיר לך תהיה הכתובת.

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

In [4]: re.findall(r"(((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){,3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))", "192.168.0.1 asd sdg sd 3245  10.0.0.1")
Out[4]:
[('192.168.0.1', '0.', '0', '1'),
 ('32', '', '', '32'),
 ('45', '', '', '45'),
 ('10.0.0.1', '0.', '0', '1')]


COM64 - 18/05/2021 - 18:05
נושא ההודעה:
תודה מאיר.

מישהו מכיר Regex שפועל כמו שצריך ומזהה כתובת IP? הגיוני שכבר מישהו שבר את הראש על זה וכתב אחד שמחזיר רשימה עם כל הכתובת ב-String
Anonymous - 18/05/2021 - 20:58
נושא ההודעה:
אם מעניין אותך ipv4 אופי תפרק עם re.split לפי '.'

ותכתוב פונקציה שתקבל 4 ארגומנטים ותבדוק אותם
mksoft - 26/05/2021 - 16:18
נושא ההודעה:
אולי זה?
https://ihateregex.io/expr/ip/

למקרה והקישור יעלם:
קוד:

(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}

Anonymous - 26/05/2021 - 17:02
נושא ההודעה:
כמעט. זה מקבל גם את הכתובת 000.000.000.000 .
COM64 - 26/05/2021 - 18:48
נושא ההודעה:
צפריר :
כמעט. זה מקבל גם את הכתובת 000.000.000.000 .


תכלס זו כתובת IP חוקית להגדרה של כתובת IP לא חוקית Smile
https://en.wikipedia.org/wiki/0.0.0.0
כל הזמנים הם GMT + 2 שעות