当Regex.Matches找到不匹配的字符串时如何停止

时间:2015-10-06 18:02:58

标签: c# regex

我正在使用正则表达式在文本文件中查找数据。我有一堆形状像这样的文本文件:

aaa
aaa
aaa

我的真实数据更复杂,但这不是我的问题所在。现在,说我有一个找到aaa的正则表达式。如果我使用方法Regex.Matches,我可以在方法的返回值上使用foreach循环来获取字符串aaa的每个实例并对其执行某些操作。但有时数据存储不正确(将数据存储在文本文件中的乐趣):

aaa
bbb
aaa

现在,Regex.Matches将为我提供2个aaa实例。但是因为这个文本文件中还有bbb,其余的数据也不可信,所以我想跳过这个文本文件。

我正在寻找一种在此文本文件上使用正则表达式的方法,以及一种检测方法,一旦Regex在字符串中找到与其不匹配的字符。真正的正则表达式非常大,所以复制粘贴它并说“寻找任何与此正则表达式不匹配的东西”并不理想。

1 个答案:

答案 0 :(得分:3)

您的问题相当广泛,但在许多情况下应采用以下方法:

\G是在上一场比赛结束时匹配的锚点,因此您可以使用它来确保两个匹配项紧跟在一起。像对待它一样,在逐行正则表达式中使用^,或者将您的模式包装在\G(?: ... )中。你很可能不得不进行小的调整(例如,如果你想忽略匹配之间的空格,你可以将正则表达式包装在\G\s*(?: ...... )中)。

您还需要确保在最后一次匹配时确实阅读了整个输入,因此给定最后一个Match对象,检查其Index + Length是否与输入长度+/-任何被忽略的内容相匹配空格(或在模式本身中解决此问题,例如以空格的\s*结尾)。