C#RegEx模式将字符串拆分为2个字符的子字符串

时间:2018-08-09 15:22:28

标签: c# regex

我正在尝试找出一个正则表达式,用于将字符串分成2个字符的子字符串。

假设我们有以下字符串:

string str = "Idno1";
string pattern = @"\w{2}";

使用上面的模式将得到“ Id”和“ no”,但是由于它与模式不匹配,因此将跳过“ 1”。我想要以下结果:

string str = "Idno1"; // ==> "Id" "no" "1 "
string str2 = "Id n o 2"; // ==> "Id", " n", " o", " 2" 

2 个答案:

答案 0 :(得分:3)

Linq可以简化代码。 Fiddle版本有效

这个想法:我有一个chunkSize = 2作为您的要求,然后,Take在索引(2,4,6,8,...)处的字符串得到了字符和Joinstring

public static IEnumerable<string> ProperFormat(string s)
    {
        var chunkSize = 2;
        return s.Where((x,i) => i % chunkSize == 0)
               .Select((x,i) => s.Skip(i * chunkSize).Take(chunkSize))
               .Select(x=> string.Join("", x));
    }

有了输入,我就有了输出

Idno1 --> 
Id
no
1

Id n o 2 -->
Id
 n
 o
 2

答案 1 :(得分:0)

在这种情况下,Linq确实更好。您可以使用此方法-它将允许将字符串拆分为任意大小的块:

public static IEnumerable<string> SplitInChunks(string s, int size = 2)
{
    return s.Select((c, i) => new {c, id = i / size})
        .GroupBy(x => x.id, x => x.c)
        .Select(g => new string(g.ToArray()));
}

但是,如果您必须使用正则表达式,请使用以下代码:

public static IEnumerable<string> SplitInChunksWithRegex(string s, int size = 2)
{
    var regex = new Regex($".{{1,{size}}}");
    return regex.Matches(s).Cast<Match>().Select(m => m.Value);
}