דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. REGEX איך לחפש מילה שלימה / תחילת מילה

REGEX איך לחפש מילה שלימה / תחילת מילה

מתוזמן נעוץ נעול הועבר תכנות
16 פוסטים 4 כותבים 485 צפיות 2 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • chagoldC chagold

    @Y-Excel-Access באיזה פלטפורמה / שפה אתה עובד? אקסל? שפת תכנות?

    Y.Excel.AccessY מנותק
    Y.Excel.AccessY מנותק
    Y.Excel.Access
    כתב ב נערך לאחרונה על ידי Y.Excel.Access
    #3

    @chagold
    VBA זה הקוד שלי (מstackoverflow)

    Dim regExp As Object
    Set regExp = CreateObject("vbscript.regexp")
    
    With regExp
        .Pattern = "(אניי)"
        .Global = True
        Selection.Text = .Replace(Selection.Text, "אני")
    End With
    

    Y.Excel.Access @ gmail.com

    chagoldC yossizY 2 תגובות תגובה אחרונה
    0
    • Y.Excel.AccessY Y.Excel.Access

      @chagold
      VBA זה הקוד שלי (מstackoverflow)

      Dim regExp As Object
      Set regExp = CreateObject("vbscript.regexp")
      
      With regExp
          .Pattern = "(אניי)"
          .Global = True
          Selection.Text = .Replace(Selection.Text, "אני")
      End With
      
      chagoldC מנותק
      chagoldC מנותק
      chagold
      כתב ב נערך לאחרונה על ידי
      #4

      @Y-Excel-Access
      בשביל תחילת הטקסט
      https://regex101.com/r/dVqB9I/1
      זה c# אבל אולי זה גם בvba. לא בדקתי.
      המקור: https://tchumim.com/topic/1463/regex-ביטויים-רגולריים/4#:~:text=תחילת הטקסט ע"י סימן העגינה של תחילת הטקסט - ^. נכתוב ככה (^| )סוכה

      Y.Excel.AccessY תגובה 1 תגובה אחרונה
      0
      • Y.Excel.AccessY Y.Excel.Access

        @chagold
        VBA זה הקוד שלי (מstackoverflow)

        Dim regExp As Object
        Set regExp = CreateObject("vbscript.regexp")
        
        With regExp
            .Pattern = "(אניי)"
            .Global = True
            Selection.Text = .Replace(Selection.Text, "אני")
        End With
        
        yossizY מחובר
        yossizY מחובר
        yossiz
        כתב ב נערך לאחרונה על ידי
        #5

        @Y-Excel-Access אתה חייב דוקא regex? למה לא להתשמש בתווים כללים של החיפוש המובנה של וורד?
        החיפוש בתווים כלליים של וורד הוא: <אניי>

        📧 יוסי@מייל.קום | 🌎 בלוג | ☕ קפה

        תגובה 1 תגובה אחרונה
        1
        • chagoldC chagold

          @Y-Excel-Access
          בשביל תחילת הטקסט
          https://regex101.com/r/dVqB9I/1
          זה c# אבל אולי זה גם בvba. לא בדקתי.
          המקור: https://tchumim.com/topic/1463/regex-ביטויים-רגולריים/4#:~:text=תחילת הטקסט ע"י סימן העגינה של תחילת הטקסט - ^. נכתוב ככה (^| )סוכה

          Y.Excel.AccessY מנותק
          Y.Excel.AccessY מנותק
          Y.Excel.Access
          כתב ב נערך לאחרונה על ידי Y.Excel.Access
          #6

          תודה לכל העונים,
          @chagold אין התייחסות למקרה " אתה ,אניי, והוא, רוצים ללמוד באנייה שלי" - צריך התייחסות גם לנקודה, פסיק, פתח וסגור סוגריים עגולות רבועות ומסולסלות, תחילת וסוף שורה, תחילת וסוף מסמך וכו'.
          בקישור שהבאת כתוב מיד אחרי כן -
          @dovid כתב בRegex - ביטויים רגולריים:

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

          וזה מה שקראתי ואני מחפש לו תחליף אמיתי.

          @yossiz זו אופציה באמת, אבל התווים הכלליים של וורד יגבילו אותי בהמשך, כשארצה לכלול עוד אפשרויות (ואלמד עוד על רג'קס:),
          בנוסף, אני פשוט לא מכיר עדיין אפשרות החלפה אחרת בלי להשתמש באופציית החיפוש והחלפה של וורד / אקסל/ אקסס, שלא שייכת כאן כשאני משתמש ב STRING. אני טועה? אשמח לתיקון והדרכה!

          Y.Excel.Access @ gmail.com

          chagoldC תגובה 1 תגובה אחרונה
          0
          • Y.Excel.AccessY Y.Excel.Access

            תודה לכל העונים,
            @chagold אין התייחסות למקרה " אתה ,אניי, והוא, רוצים ללמוד באנייה שלי" - צריך התייחסות גם לנקודה, פסיק, פתח וסגור סוגריים עגולות רבועות ומסולסלות, תחילת וסוף שורה, תחילת וסוף מסמך וכו'.
            בקישור שהבאת כתוב מיד אחרי כן -
            @dovid כתב בRegex - ביטויים רגולריים:

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

            וזה מה שקראתי ואני מחפש לו תחליף אמיתי.

            @yossiz זו אופציה באמת, אבל התווים הכלליים של וורד יגבילו אותי בהמשך, כשארצה לכלול עוד אפשרויות (ואלמד עוד על רג'קס:),
            בנוסף, אני פשוט לא מכיר עדיין אפשרות החלפה אחרת בלי להשתמש באופציית החיפוש והחלפה של וורד / אקסל/ אקסס, שלא שייכת כאן כשאני משתמש ב STRING. אני טועה? אשמח לתיקון והדרכה!

            chagoldC מנותק
            chagoldC מנותק
            chagold
            כתב ב נערך לאחרונה על ידי chagold
            #7

            @Y-Excel-Access
            זה?
            https://regex101.com/r/f31L7J/1
            או שבכוונה שמת את השגיאה שהפסיק לא במקום. ואז אפשר לעשות שיחפש את הרווח או את הפסיק אבל השאלה לכמה אפשרויות אתה רוצה להתרחב. (עכ"פ זה לא כלול בשאלה המקורית של תחילת מילה, כי אם יש את הפסיק אז זה לא התחלה)

            Y.Excel.AccessY תגובה 1 תגובה אחרונה
            0
            • chagoldC chagold

              @Y-Excel-Access
              זה?
              https://regex101.com/r/f31L7J/1
              או שבכוונה שמת את השגיאה שהפסיק לא במקום. ואז אפשר לעשות שיחפש את הרווח או את הפסיק אבל השאלה לכמה אפשרויות אתה רוצה להתרחב. (עכ"פ זה לא כלול בשאלה המקורית של תחילת מילה, כי אם יש את הפסיק אז זה לא התחלה)

              Y.Excel.AccessY מנותק
              Y.Excel.AccessY מנותק
              Y.Excel.Access
              כתב ב נערך לאחרונה על ידי Y.Excel.Access
              #8

              @chagold כן, בכוונה שמתי את הפסיק שם... יש גם סגור סוגריים וכו', ואנשים לא מקלידים הכי בדיוק...
              כמו שהסברתי, אני פשוט רוצה חיקוי ל \d ש @david הביא, כי זה בדיוק מה שאני צריך.
              אשמח גם לקישור (למרות שחיפשתי... לא יכול להיות שאין כזה דבר כבר מוכן!)

              Y.Excel.Access @ gmail.com

              chagoldC תגובה 1 תגובה אחרונה
              0
              • Y.Excel.AccessY Y.Excel.Access

                @chagold כן, בכוונה שמתי את הפסיק שם... יש גם סגור סוגריים וכו', ואנשים לא מקלידים הכי בדיוק...
                כמו שהסברתי, אני פשוט רוצה חיקוי ל \d ש @david הביא, כי זה בדיוק מה שאני צריך.
                אשמח גם לקישור (למרות שחיפשתי... לא יכול להיות שאין כזה דבר כבר מוכן!)

                chagoldC מנותק
                chagoldC מנותק
                chagold
                כתב ב נערך לאחרונה על ידי
                #9

                @Y-Excel-Access https://regex101.com/r/GGmlSd/1

                chagoldC תגובה 1 תגובה אחרונה
                0
                • chagoldC chagold

                  @Y-Excel-Access https://regex101.com/r/GGmlSd/1

                  chagoldC מנותק
                  chagoldC מנותק
                  chagold
                  כתב ב נערך לאחרונה על ידי
                  #10

                  @chagold סליחה
                  https://regex101.com/r/15UuyS/1

                  Y.Excel.AccessY תגובה 1 תגובה אחרונה
                  1
                  • chagoldC chagold

                    @chagold סליחה
                    https://regex101.com/r/15UuyS/1

                    Y.Excel.AccessY מנותק
                    Y.Excel.AccessY מנותק
                    Y.Excel.Access
                    כתב ב נערך לאחרונה על ידי Y.Excel.Access
                    #11

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

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

                    Y.Excel.Access @ gmail.com

                    Y.Excel.AccessY תגובה 1 תגובה אחרונה
                    0
                    • Y.Excel.AccessY Y.Excel.Access

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

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

                      Y.Excel.AccessY מנותק
                      Y.Excel.AccessY מנותק
                      Y.Excel.Access
                      כתב ב נערך לאחרונה על ידי Y.Excel.Access
                      #12

                      @chagold ניסיתי, ואולי הצלחתי.
                      זה אמור להיות טוב? לכאורה זה עובד לי...

                      ((^|[^a-zA-Z0-9_א-ת])אניי($|[^a-zA-Z0-9_א-ת]))
                      

                      ו מצאתי בעיה אחרת... שההחלפה בקוד VBA שהבאתי מחליפה לי גם את התווים הסובבים, ולא רק את המילה.

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

                      Y.Excel.Access @ gmail.com

                      Y.Excel.AccessY תגובה 1 תגובה אחרונה
                      0
                      • Y.Excel.AccessY Y.Excel.Access

                        @chagold ניסיתי, ואולי הצלחתי.
                        זה אמור להיות טוב? לכאורה זה עובד לי...

                        ((^|[^a-zA-Z0-9_א-ת])אניי($|[^a-zA-Z0-9_א-ת]))
                        

                        ו מצאתי בעיה אחרת... שההחלפה בקוד VBA שהבאתי מחליפה לי גם את התווים הסובבים, ולא רק את המילה.

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

                        Y.Excel.AccessY מנותק
                        Y.Excel.AccessY מנותק
                        Y.Excel.Access
                        כתב ב נערך לאחרונה על ידי Y.Excel.Access
                        #13

                        אשמח שוב את עזרתכם (בפרט @yossiz )

                        שאלתי מתכנת שאני מכיר,
                        הוא הביא לי את הקוד הזה:

                        "((?<=[^a-zA-Z0-9_])|^)" & MyStr & "((?=[^a-zA-Z0-9_])|$)"
                        

                        זה מחפש את הטקסט אבל לא בוחר אותו.
                        לדאבוני זה לא עובד ב VBA...
                        אז הביא לי את זה:

                        "(?:[^a-zA-Z0-9_]|^)("& MyStr &")(?:[^a-zA-Z0-9_]|$)"
                        

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

                        מצאתי מעין זה לגבי חיפוש והחלפה רגילים של וורד, (לא הצלחתי ליישם בפועל כאן):

                        @yossiz כתב בעזרה בחיפוש והחלפה בוורד:

                        @אוריי תשתמש בתווים כלליים ככה:
                        0f0decc3-b9b0-4801-98c6-ecd3aab219c5-image.png

                        החיפוש:

                        (^13[א-ת]@)\\].
                        

                        החלפה:

                        \1.
                        

                        הסבר:

                        חיפוש:

                        • (...) מכיל קבוצה שניתן לציין אח״כ בהחלפה
                        • ^13 סימן סוף פיסקה (בחיפוש עם תווים כלליים)
                        • [א-ת] כל תו בטווח א-ת
                        • @ 1 או יותר מהנ״ל
                        • \]. מייצגים את עצמם, צריך מילוט (\) לפני ה-\] אחרת יש לתו זה משמעות מיוחדת

                        החלפה:

                        • \1 התוכן של הקבוצה הראשונה בחיפוש (...)
                        • . נקודה

                        תודה רבה!

                        Y.Excel.Access @ gmail.com

                        Y.Excel.AccessY תגובה 1 תגובה אחרונה
                        0
                        • Y.Excel.AccessY Y.Excel.Access

                          אשמח שוב את עזרתכם (בפרט @yossiz )

                          שאלתי מתכנת שאני מכיר,
                          הוא הביא לי את הקוד הזה:

                          "((?<=[^a-zA-Z0-9_])|^)" & MyStr & "((?=[^a-zA-Z0-9_])|$)"
                          

                          זה מחפש את הטקסט אבל לא בוחר אותו.
                          לדאבוני זה לא עובד ב VBA...
                          אז הביא לי את זה:

                          "(?:[^a-zA-Z0-9_]|^)("& MyStr &")(?:[^a-zA-Z0-9_]|$)"
                          

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

                          מצאתי מעין זה לגבי חיפוש והחלפה רגילים של וורד, (לא הצלחתי ליישם בפועל כאן):

                          @yossiz כתב בעזרה בחיפוש והחלפה בוורד:

                          @אוריי תשתמש בתווים כלליים ככה:
                          0f0decc3-b9b0-4801-98c6-ecd3aab219c5-image.png

                          החיפוש:

                          (^13[א-ת]@)\\].
                          

                          החלפה:

                          \1.
                          

                          הסבר:

                          חיפוש:

                          • (...) מכיל קבוצה שניתן לציין אח״כ בהחלפה
                          • ^13 סימן סוף פיסקה (בחיפוש עם תווים כלליים)
                          • [א-ת] כל תו בטווח א-ת
                          • @ 1 או יותר מהנ״ל
                          • \]. מייצגים את עצמם, צריך מילוט (\) לפני ה-\] אחרת יש לתו זה משמעות מיוחדת

                          החלפה:

                          • \1 התוכן של הקבוצה הראשונה בחיפוש (...)
                          • . נקודה

                          תודה רבה!

                          Y.Excel.AccessY מנותק
                          Y.Excel.AccessY מנותק
                          Y.Excel.Access
                          כתב ב נערך לאחרונה על ידי Y.Excel.Access
                          #14

                          הצלחתי!
                          ככה:

                                  "([^a-zA-Z0-9_]|^)" & myStr & "([^a-zA-Z0-9_]|$)"
                          
                          

                          ובהחלפה להתייחס לקבוצה שלפני כ $1 והקבוצה שאחרי כ $2.

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

                          Public Sub Regex_החלפה_לפי_מילה_שלימה(ByRef טקסט As String, ByVal מילה_לחיפוש As String, ByVal מילה_מחליפה As String)
                              Regex_HideSpecialCharacter מילה_לחיפוש
                              Dim regExp As Object
                              Set regExp = CreateObject("vbscript.regexp")
                          
                              With regExp
                                  .Pattern = "([^a-zA-Z0-9_]|^)" & מילה_לחיפוש & "([^a-zA-Z0-9_]|$)"
                                  .Global = True
                                  טקסט = .Replace(טקסט, "$1" & מילה_מחליפה & "$2")
                              End With
                          End Sub
                          

                          Y.Excel.Access @ gmail.com

                          Y.Excel.AccessY תגובה 1 תגובה אחרונה
                          0
                          • Y.Excel.AccessY Y.Excel.Access

                            הצלחתי!
                            ככה:

                                    "([^a-zA-Z0-9_]|^)" & myStr & "([^a-zA-Z0-9_]|$)"
                            
                            

                            ובהחלפה להתייחס לקבוצה שלפני כ $1 והקבוצה שאחרי כ $2.

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

                            Public Sub Regex_החלפה_לפי_מילה_שלימה(ByRef טקסט As String, ByVal מילה_לחיפוש As String, ByVal מילה_מחליפה As String)
                                Regex_HideSpecialCharacter מילה_לחיפוש
                                Dim regExp As Object
                                Set regExp = CreateObject("vbscript.regexp")
                            
                                With regExp
                                    .Pattern = "([^a-zA-Z0-9_]|^)" & מילה_לחיפוש & "([^a-zA-Z0-9_]|$)"
                                    .Global = True
                                    טקסט = .Replace(טקסט, "$1" & מילה_מחליפה & "$2")
                                End With
                            End Sub
                            
                            Y.Excel.AccessY מנותק
                            Y.Excel.AccessY מנותק
                            Y.Excel.Access
                            כתב ב נערך לאחרונה על ידי Y.Excel.Access
                            #15

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

                            Public Sub Regex_HideSpecialCharacter(ByRef str As String)
                            
                                Dim specialCharacters As Variant, i As Integer
                                specialCharacters = Array("[", "\", "$", "&", "+", ",", ":", ";", "=", "?", "@", "#", "|", "'", "<", ">", ".", "^", "*", "(", ")", "%", "!", "-", "]")
                                For i = 0 To 24 ' == Len("[\$&+,:;=?@#|'<>.^*()%!-]") - 1
                                    str = Replace(str, specialCharacters(i), "\" & specialCharacters(i))
                                Next i
                            
                            End Sub
                            

                            Y.Excel.Access @ gmail.com

                            dovidD תגובה 1 תגובה אחרונה
                            0
                            • Y.Excel.AccessY Y.Excel.Access

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

                              Public Sub Regex_HideSpecialCharacter(ByRef str As String)
                              
                                  Dim specialCharacters As Variant, i As Integer
                                  specialCharacters = Array("[", "\", "$", "&", "+", ",", ":", ";", "=", "?", "@", "#", "|", "'", "<", ">", ".", "^", "*", "(", ")", "%", "!", "-", "]")
                                  For i = 0 To 24 ' == Len("[\$&+,:;=?@#|'<>.^*()%!-]") - 1
                                      str = Replace(str, specialCharacters(i), "\" & specialCharacters(i))
                                  Next i
                              
                              End Sub
                              
                              dovidD מנותק
                              dovidD מנותק
                              dovid
                              ניהול
                              כתב ב נערך לאחרונה על ידי
                              #16

                              @Y-Excel-Access יפה, הצעות לשיפור שלי
                              א.
                              במקום
                              [^a-zA-Z0-9_]
                              ניתן לכתוב
                              \W
                              ובמקום
                              [^a-zA-Z0-9_א-ת]
                              אפשר
                              [^\wא-ת]

                              ב. בשביל הRegex_HideSpecialCharacter, ראשית כל יותר נכון להשתמש בפונקציה, ושנית אפשר גם פה להשתמש בRegExp:

                              Public Function Regex_HideSpecialCharacter(ByVal str As String) As String
                                  Dim regExp As Object
                                  Set regExp = CreateObject("vbscript.regexp")
                              
                                  With regExp
                                      .Pattern = "([\[\\\$&\+,:;=\?@#\|'<>\.\^\*\(\)%!-\]])"
                                      .Global = True
                                      Regex_HideSpecialCharacter = .Replace(str, "\$1")
                                  End With
                              End Function
                              
                              
                              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                              תגובה 1 תגובה אחרונה
                              2
                              תגובה
                              • תגובה כנושא
                              התחברו כדי לפרסם תגובה
                              • מהישן לחדש
                              • מהחדש לישן
                              • הכי הרבה הצבעות


                              בא תתחבר לדף היומי!
                              • התחברות

                              • אין לך חשבון עדיין? הרשמה

                              • התחברו או הירשמו כדי לחפש.
                              • פוסט ראשון
                                פוסט אחרון
                              0
                              • דף הבית
                              • קטגוריות
                              • פוסטים אחרונים
                              • משתמשים
                              • חיפוש
                              • חוקי הפורום