2

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

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:";  

该模式返回所有上述字符串,但我需要修剪在模式最后一次出现之前出现的所有文本,以便返回一个看起来像第一个的行。我在这里查看了许多类似的问题,但我无法找到在我的代码中实际有效或对我有意义的答案。

请记住,上述示例并非详尽的可能性列表。这就是我尝试使用正则表达式而不是字符串方法的原因。

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

正则表达式+删除匹配前
的所有文本正则表达式文本中的多个匹配正则
表达式:过滤掉最后一次出现之前的文本

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

4

2 回答 2

2

尝试以下操作:

string str = Regex.Replace(input, @"(.+?)(N\d\.C\d\.R\d:)", "$2");
于 2013-02-13T16:35:44.957 回答
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正则表达式选项。

于 2013-02-13T17:02:13.203 回答