在最后一次正则表达式匹配之前修剪所有文本

时间:2013-02-13 16:30:28

标签: c# regex

我试图在最后一次出现正则表达式匹配之前删除所有文本,而不删除匹配或必须将其替换为任何其他文本。以下是我正在解析的文件中的几行示例行:

N3.C2.R1:19 00000000 00000000 00 ** 0000 00000000 00000000 00000000 00000000
N0.C0.R0N3.C3.R1:19 00000000 00000000 00000000 00000000 00000000 00000000 00000000
.N3.C3.R0:18 00000000 00000000 00000000 00000000 00000 * 00 00000000 00000000
写入等级1 ... N3.C1.R3:-22 0000000 * 00000000 00000000 00000000 00000 * 00 00000000 00000000

第一行是理想的行,并与返回值相匹配。我的正则表达式模式如下:

string pattern = @"N\d\.C\d\.R\d:";  

模式返回所有上述字符串,但我需要修剪最后一次出现模式之前出现的所有文本,以便返回看起来像第一个的行。我在这里看了很多类似的问题,但是我找不到能够在我的代码中实际运行的答案,或者对我来说有用的答案。

请注意,上述示例并非详尽无遗的列表。这就是我试图使用Regex而不是字符串方法的原因。

作为参考,以下是我在询问此问题之前所阅读的类似问题:

Regex + Remove all text before match
RegEx Multple Matches in Text
Regex: Filter out text before last occurrence

编辑:我应该指出,我正在使用的行是原始文件中包含的信息的一小部分。我发布的所有样本行都是“好”信息的例子(即我可以使用的信息),但第一行是最终输出应该是什么样的。

2 个答案:

答案 0 :(得分:2)

请尝试以下操作:

string str = Regex.Replace(input, @"(.+?)(N\d\.C\d\.R\d:)", "$2");

答案 1 :(得分:0)

此方法还会返回您上次匹配后可能出现的内容(例如,数字后面的其余部分):

string pattern = @"^N\d\.C\d\.R\d:";
var matches = Regex.Matches(input, pattern, RegexOptions.Multiline);
if (matches.Count > 0) {
    string result = input.Substring(matches[matches.Count - 1].Index);
}

我还包括^,以便明确搜索该行的开头。这需要Multiline正则表达式选项。