正则表达式只返回多个匹配的第一个结果

时间:2012-01-04 07:54:37

标签: c# regex match

使用c# vs2008 Regex

我正在尝试从文件中的文本加载一个非常长的字符串中获取一个数字。

在这个源字符串中,有多个我希望得到的数据实例 例如。 “税务发票号INV1870507 ”可能会在来源String中重复10次,每次匹配之间的字符数不明。 我想把号码“1870507”拿出来。我加载的每个不同文件的数量都不同,我需要找到这个数字。

使用此模式:(?<=Tax Invoice No[\s\r\n]+INV)(?'InvNo'[^\s\r\n]+)? 我可以正确地得到每次出现的匹配,并可以读取数字。

但我得到10场比赛和10组。

我希望Regex在第一场比赛时短路并且只返回1场比赛因为我有我需要的信息而且没有必要保持匹配。

有人可以提供建议吗?

1 个答案:

答案 0 :(得分:3)

你想将它用于C#,所以你可以使用:

Regex regex = new Regex("(?<=Tax Invoice No[\s\r\n]+INV)(?'InvNo'[^\s\r\n]+)?");
regex.Match(myString);

匹配:在输入字符串中搜索正则表达式的第一次出现 ...

那应该实际上做你想要的。