2014-01-11 40 views
2

我想知道是否有人可以提供幫助。我試圖改變以下格式的字符串:C#正則表達式在第三個字符後插入「_」,然後在第八個字符後面插入一個新行

goeirjew98rut34ktljre9t30t4j3der

被輸出如下:

geo_irje_w

98r_ut34_k

tlj_re9t_3

0t4_j3de_r

因此在第三個和第七個字符後插入下劃線,並在第八個字符後插入一個新行。

做一些閱讀後,我認爲這樣做可能會通過一個正則表達式是這樣的,在下面的鏈接的例子的最佳方式:

http://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx

但是我不知道如何修改本作我的需求。任何幫助,所以永遠將不勝感激。

感謝

+0

我不知道你需要一個正則表達式來做到這一點改變一切。 –

+0

正則表達式對提取數據特別有用,這有點關閉。爲什麼你不能只用一個'if's的循環? –

+1

您只需要使用String.Substring方法,String.Insert方法和一個循環。 –

回答

2

它可以用正則表達式可以輕鬆解決和替換,就像這樣:

var s = "goeirjew98rut34ktljre9t30t4j3der"; 
Regex.Replace(s, @"(\w{3})(\w{4})(\w{1})", "$1_$2_$3\n").Dump(); 
+0

如果您喜歡閱讀RegExes,我實際上比我自己喜歡這個解決方案。 OP如果你使用這個,我會留下一個自己的評論,它的功能,可維護性和/或學習,直到你更舒適。我用更復雜的我做這個。 – Matt

2

這是肯定的東西是最好的一個快速循環解決:

string s = "goeirjew98rut34ktljre9t30t4j3der"; 

var outputs = new List<string>(); 
for (var i = 0; i < s.Length; i += 8) 
{ 
    string sub = s.Substring(i, Math.Min(8, s.Length - i)); 
    if(sub.Length > 3) 
     sub = sub.Insert(3, "_"); 

    if (sub.Length > 8) 
     sub = sub.Insert(8, "_"); 

    outputs.Add(sub); 
} 
+0

Cheers tencntraze非常感謝您的幫助。我只是從編程和C#開始,所以不確定最好的方式來做事情,但閱讀它看起來很完美。再次感謝您的幫助:) – user3185573

0

我認爲你不能通過這條規則在字符串中插入字符,但我希望這段代碼對你有用。

public string Decode(string str) 
{ 
    var state = 0; 
    var c = 0; 
    var newStr = string.Empty; 
    foreach (var ch in str) 
    { 
     c++; 
     newStr += ch; 
     if (state == 0 && c == 3) 
     { 
      newStr += "_"; 
      state = 1; 
      c = 0; 
     } 
     if (state == 1 && c == 4) 
     { 
      newStr += "_"; 
      state = 2; 
      c = 0; 
     } 
     if (state == 2 && c == 1) 
     { 
      newStr += "\r\n"; 
      state = 0; 
      c = 0; 
     } 
    } 
    return newStr; 
} 
0

我會讓你還是你可以在飛行中和使用stringextentions

class Program 
{ 
    static void Main(string[] args) 
    { 
     string str = "goeirjew98rut34ktljre9t30t4j3der"; 
     var parts = str.SplitInParts(8); //Split in different parts 
     foreach (var part in parts) 
     { 
      string formattedString = part.MultiInsert("_", 2, 6); //Insert your char on all position u want 
      Console.WriteLine(formattedString); 
     } 
     Console.ReadKey(); 
    } 
} 

static class StringExtensions 
{ 
    public static IEnumerable<String> SplitInParts(this String s, Int32 partLength) 
    { 
     if (s == null) 
      throw new ArgumentNullException("s"); 
     if (partLength <= 0) 
      throw new ArgumentException("Part length has to be positive.", "partLength"); 

     for (var i = 0; i < s.Length; i += partLength) 
      yield return s.Substring(i, Math.Min(partLength, s.Length - i)); 
    } 

    public static string MultiInsert(this string str, string insertChar, params int[] positions) 
    { 
     StringBuilder sb = new StringBuilder(str.Length + (positions.Length * insertChar.Length)); 
     var posLookup = new HashSet<int>(positions); 
     for (int i = 0; i < str.Length; i++) 
     { 
      sb.Append(str[i]); 
      if (posLookup.Contains(i)) 
       sb.Append(insertChar); 
     } 
     return sb.ToString(); 
    } 
} 
相關問題