到目前为止,这是我制作的示例。我真正完成的是把每一个文本都放在开括号"{"和闭括号"}"内。
示例文本:
var sampleText = {Id:11} this is a sample text {Id:11} > {Id:12} > {Id: 13} text.
代码:
var ans12 = Regex.Match(sampleText, @"{(.*?)}");
实际输出:IS故障
Id:11
需要输出:IS PASS
Id:11
Id:11
Id:12
Id:13
使用Rex.Matches
方法,该方法将返回与正则表达式匹配的对象集合。每个都有一个属性.Value和.Index。所以你的代码变成:
var ans12 = Regex.Matches(sampleText, @"{(.*?)}");
现在您需要遍历集合:
foreach (var match in ans12)
{
Console.WriteLine(match.Value);
}
您尝试过ans12.NextMatch()
吗?
Regex.Match在其中存储多个结果。
var sampleText ="{Id:11} this is a sample text {Id:11} > {Id:12} > {Id: 13} text.";
var ans12 = Regex.Match(sampleText, @"{(.*?)}");
ans12.ToString().Dump();
ans12 = ans12.NextMatch();
ans12.ToString().Dump();
ans12 = ans12.NextMatch();
ans12.ToString().Dump();
ans12 = ans12.NextMatch();
ans12.ToString().Dump();
ans12 = ans12.NextMatch();
ans12.ToString().Dump();
Fiddle
如果你真的想从字符串部分中删除空格,你可以使用这个简单的模式(如果需要,很容易更改/调整(来返回与需要输出匹配的字符串:
注意:.{2}
与Id
匹配,但如果您总是有Id
,并且大小写相同,则使用它
如果文本很长并且需要缓存这些字符串,请使用StringBuilder。
var sampleText = "{Id:11} this is a sample text {Id:11} > {Id:12} > {Id: 13} text";
var matches = Regex.Matches(sampleText, @"{(.{2}:)s*(d+)}");
foreach (Match m in matches) {
Console.WriteLine(m.Groups[1].Value + m.Groups[2].Value);
}
完全匹配的m值当然是{Id:11}
、{Id: 13}
等
打印:
Id:11
Id:11
Id:12
Id:13