我是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
答案 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());
}