C#use regex中字符串的格式
字符串源 “/jame/NG2IH4CJ3EK8/haki/g8o7o3” 如何将其分组: 杰米,吴,2 杰姆,ih,4 杰姆,cj,3 jame,ekk,8岁 哈基,g,8 哈基,o,7 哈基,o,3 这是我的代码和结果: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]
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问题,所以他可以相应地修改它