有没有一种方法可以使用C#正则表达式获取字符串中字符内部的文本



到目前为止,这是我制作的示例。我真正完成的是把每一个文本都放在开括号"{"和闭括号"}"内。

示例文本:

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

最新更新