C#use regex中字符串的格式

C#use regex中字符串的格式,c#,regex,string,C#,Regex,String,字符串源 “/jame/NG2IH4CJ3EK8/haki/g8o7o3” 如何将其分组: 杰米,吴,2 杰姆,ih,4 杰姆,cj,3 jame,ekk,8岁 哈基,g,8 哈基,o,7 哈基,o,3 这是我的代码和结果: Console.OutputEncoding = Encoding.UTF8; MatchCollection mc; string source = "/jame/n2i4c3e8/haki/g8o7o3"; string pattern = @"(/[A-Z_a-z]

字符串源

“/jame/NG2IH4CJ3EK8/haki/g8o7o3”

如何将其分组:

杰米,吴,2

杰姆,ih,4

杰姆,cj,3

jame,ekk,8岁

哈基,g,8

哈基,o,7

哈基,o,3

这是我的代码和结果:

Console.OutputEncoding = Encoding.UTF8;
MatchCollection mc;
string source = "/jame/n2i4c3e8/haki/g8o7o3";

string pattern = @"(/[A-Z_a-z]+/)|([A-Z_[ạảàáãăắẳằặẵâấẩầậẫóỏòọõôốổồộỗơớởờợỡéèẻẹẽêếềểệễúùủụũưứừửựữíìỉịĩýỳỷỵỹđ_ẠẢÀÁÃĂẮẲẰẶẴÂẤẨẦẬẪÓỎÒỌÕÔỐỔỒỘỖƠỚỞỜỢỠÉÈẺẸẼÊẾỀỂỆỄÚÙỦỤŨƯỨỪỬỰỮÍÌỈỊĨÝỲỶỴỸĐ_a-z]+_?[0-9_/._0-9]+)";
Regex myRegex = new Regex(pattern);
mc = myRegex.Matches(source);
foreach (Match m in mc)
{
    Console.WriteLine(m.Value);
}
Console.ReadLine();
/果酱/

ng2

ih4

cj3

ekk8/

哈基/

八国集团

o7

臭氧

您可以使用以下代码:

string source = "/jame/n2i4c3e8/haki/ns2is5cs6eu7";
var splitted = Regex.Split(source, @"(?=\/[a-z]+\/)");

foreach (var word in splitted.Where(x => !string.IsNullOrEmpty(x)))
{
    var cutted = word.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
    var baseWord = cutted.First();

    foreach(var end in Regex.Split(cutted.Last(), @"([a-z]+\d)").Where(x => !string.IsNullOrEmpty(x)))
        Console.WriteLine($"/{baseWord}/{Regex.Match(end, @"[a-z]+")},{Regex.Match(end, @"\d+")} ");
}

这将源拆分为两个项(“键”和“值”)的组,并将值拆分为以数字结尾的几个子字符串

var source = "/jame/ng2ih4cj3ekk8/haki/g8o7o3";
var results = source.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
    .Select ((value, index) => new {value, index})
    .GroupBy(item => item.index / 2, item => item.value);

foreach (var result in results)
{
    var items = Regex.Replace(result.Last(), @"\d", match =>
    {
        return "," + match.Value + Environment.NewLine;
    });

    foreach (var item in items.Split(Environment.NewLine.ToCharArray(),
                                     StringSplitOptions.RemoveEmptyEntries))
        Console.WriteLine(result.First() + "," + item);
}
然而,我认为我可以做得更好。拿着我的啤酒

EDIT:此版本利用正则表达式中的
MatchEvaluator
参数。Replace调用格式化输出字符串:

var source = "/jame/ng2ih4cj3ekk8/haki/g8o7o3";
var result = Regex.Replace(source, @"/(?<group>.*?)/(?<value>[^/]+)", match =>
{
    return Regex.Replace(match.Groups["value"].Value, @"(?<letter>\D+)(?<number>\d)",sub =>
    {
        return match.Groups["group" ].Value + "," +                // "jame,"
               sub  .Groups["letter"].Value + "," +                // "ng,"
               sub  .Groups["number"].Value + Environment.NewLine; // "2<CRLF>"
    });
});

Console.WriteLine(result);
var source=“/jame/ng2ih4cj3ekk8/haki/g8o7o3”;
var result=Regex.Replace(source,@/(?.*?/(?[^/]+)),match=>
{
返回Regex.Replace(match.Groups[“value”].value,@“(?\D+?\D)”,sub=>
{
返回match.Groups[“group”].Value+,“+/”jame,“
子组[“字母”].Value+,“+/”ng
子组[“编号”].Value+Environment.NewLine;/“2”
});
});
控制台写入线(结果);

那些组
n2i4c3e8
g8o7o3
总是偶数个字符吗?在我的例子中,有时它们是
ns2is5cs6eu7
gw0ue7kshd8
。我的ex是
字符串编号字符串编号
而不是所有这些字符(
[ạả使用
[\p{L}}]
使用
Regex.Matches(s,@)(?但在某些情况下,我的字符串源包含UNICODE。`[\p{L}}]`能表演吗?真是太感谢人了。天哪,这很管用。但是如果我想得到上面这样的结果,非
/
而且它有
怎么做:
jame,ng,2 jame,ih,4 jame,cj,3 jame,ekk,8 haki,g,8 haki,o,7 haki,o,3
Wowwwww!!!谢谢你。我工作了,这本家庭作业我试着得到了一周,但代码没有t work.:(谢谢我的朋友,非常有用)(y)谢谢你支持我!有没有理由用
\D+
代替
\w+
?@BurnsBA,没有特别的原因;似乎OP需要处理一些unicode问题,所以他可以相应地修改它