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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תוכנה
  3. regex in c#

regex in c#

מתוזמן נעוץ נעול הועבר תוכנה
2 פוסטים 2 כותבים 140 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    שרה רחל
    כתב ב נערך לאחרונה על ידי dovid
    #1

    מנסה לכתוב קוד שמקבל רצף תוים ומחלק למילים ואם מילה יותר מ10 תוים
    אז שתתחלק למילים בנות 10 תוים
    למשל
    hello now is ten av abcdefghijklmnopqrstuvwxyz
    יוצא:

    hello
    now
    is
    ten
    av
    abcdefghij
    klmnopqrst
    uvwxyz
    מה לא נכון כאן:

    string[] words = Regex.Split(sWord, @"\W+|/\w{10}");
                                foreach (var word in words)
                                {
                               
                      
                                      Console.WriteLine("WORD: " + words);
    
    dovidD תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      השיב לשרה רחל ב נערך לאחרונה על ידי dovid
      #2

      @שרה-רחל ראשית בקוד שלך יש כפל של escape, כי גם שמת @ וגם לוכסן הפוך, אז יוצא שהRegex מחפש את הטקסט \wwwwwwwwwwww. (לוכסן שאחריו 10 w).
      אם נתקן את הבעיה הזאת נקבל תוצאה קרובה למה שאת רוצה:

      hello 
      now 
      is 
      ten 
      av 
        
        
      uvwxyz 
      

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

      hello 
      now 
      is 
      ten 
      av 
        
      abcdefghij 
        
      klmnopqrst 
      uvwxyz 
      

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

      List<string> SplitByWordsAndLength(string input, int len = 10)
      {
          var list = new List<string>();
          var pos = -1;
      
          for (var counter = 0; counter < input.Length; counter++)
          {
              if (char.IsSeparator(input[counter]))
              {
                  if (pos != -1)
                      list.Add(input.Substring(pos, counter - pos));
                  pos = -1;
              }
              else
              {
                  if (pos == -1) pos = counter;
                  else if ((counter - pos) == len)
                  {
                      list.Add(input.Substring(pos, counter - pos));
                      pos = counter;
                  }
              }
          }
      
          if (pos != -1)
              list.Add(input.Substring(pos));
      
          return list;
      }
      

      וזה בטעם מודרני יותר:

      IEnumerable<string> SplitByWordsAndLength(string input, int len = 10)
      {
          var pos = -1;
          for (var counter = 0; counter < input.Length; counter++)
              if (char.IsSeparator(input[counter]))
              {
                  if (pos != -1)
                      yield return input[pos..counter];
                  pos = -1;
              }
              else
              {
                  if (pos == -1) pos = counter;
                  else if ((counter - pos) == len)
                  {
                      yield return input[pos..counter];
                      pos = counter;
                  }
              }
      
      
          if (pos != -1)
              yield return input[pos..];
      }
      

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      10

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

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

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