2016-09-28 70 views
-2

我打电话下面的匹配,但我得到一个异常,说:“表达式评估器中的内部错误。当我尝试并通过“* _sales.txt”作为config.FileNamePattern。由于某种原因,它不喜欢这种模式。我究竟做错了什么?我尝试通过和不带'@'符号。正则表达式匹配抛出异常与我的模式

Match match = Regex.Match(Path.GetFileName(file), @config.FileNamePattern, RegexOptions.IgnoreCase); 
+1

因为你传递了一个无效的正则表达式。它不能从量词开始。试试'@“_ sales \ .txt $”' –

+2

和'* _sales.txt'无论如何都不是有效的模式。 '*'是一个量词,你没有什么可以量化的。 '。* sales.txt'将是有效的。 –

+0

实际上,我不认为这个问题与通配符有关,只是'*'被用作不正确的正则表达式模式,因为OP认为它也可以用作正则表达式。 –

回答

0

Regex.Match的第二个参数是一个正则表达式模式。您通过"*_sales.txt",以*开头,您认为这是通配符,但实际上是匹配零个或多个匹配项的量词。它不能量化模式的开始,它是一个无效的正则表达式。

您可能需要使用

@"_sales\.txt$" 

检查一个字符串_sales.txt结束。另外,将RegexOptions.RightToLeft添加到您的选项可以优化匹配从最后的字符串。

注意.被转义以匹配文字点。

此外,逐字字符串文字是定义正则表达式模式的最佳方式,因为您只需要转义特殊字符一次。