从大型文本文档返回第一个匹配项

时间:2016-05-26 17:50:33

标签: .net regex

我是regex的新手,正在尝试学习如何使用正则表达式提取所需信息。我相信我理解了基础知识,只是找不到使用.net获得第一场比赛的方法。

我正在尝试从通过互联网账单创建的大型文本文档中获取帐号。帐号可能在行的开头,也可能不在行的开头,但应始终以"帐号"开头。如何让它仅返回第一场比赛?

示例:

Account number 8448 20 020 1561858 Customer code 3501  
Account number 8448 20 020 1561858

我正在尝试的表达式可以获取正确的数字,但它会同时选择两个帐号:

(?<=Account number )(\d+\s\d+\s?){2}

预期回报:

8448 20 020 1561858

1 个答案:

答案 0 :(得分:2)

你的正则表达式足够好了。它只是捕获额外的空间(你以后可以修剪它)。此外,你必须修改捕获组有点像这样来捕获整个数字

(?<=Account number )((?:\d+\s\d+\s?){2})

<强> Regex Demo

或只是

(?<=Account number )(\d+\s+\d+\s+\d+\s+\d+)

<强> Regex Demo

.net代码

var pattern = "(?<=Account number )((?:\\d+\\s\\d+\\s?){2})";
var input = "Account number 8448 20 020 1561858 Customer code 3501\nAccount number 8448 20 020 1561858";
Regex rgx = new Regex(pattern);
Match match = rgx.Match(input);

while (match.Success) {
    Console.WriteLine(match.Groups[1].Value.Trim());
    match = match.NextMatch();
}

<强> .net fiddle demo

如果您只想要第一场比赛,那么您可以使用

if (match.Success) {
    Console.WriteLine(match.Groups[1].Value.Trim());
}