我有以下正则表达式来验证文件名:
^(([a-zA-Z]:| \)\)?(((。)|(..)|([^ \ /:* \?“\ |<&gt ;.]( ([^ \ /:* \?“\ |<>。])|([^ \ /:* \?”\ |<>] [^ \ /:* \?“\ |<&gt ;.]))?))\) [^ \ /:* \?“\ |<&gt ;.](([^ \ /:* \?”\ |< >。])|([^ \ /:* \?“\ |<>] * [^ \ /:* \?”\ |<>。]))?$
我可以在VB.NET中使用它而不是C#。我无法弄清楚为什么它在一个而不是另一个中起作用。
VB代码:
Regex.Matches("c:\temp\abc.exe", "^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?))\\)*[^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?$")
C#代码:
Regex.Matches("c:\temp\abc.exe", @"^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?))\\)*[^\\/:\*\?""\|<>\. ](([^\\/:\*\?""\|<>\. ])|([^\\/:\*\?""\|<>]*[^\\/:\*\?""\|<>\. ]))?$");
据我所知,两种语言中的模式都是相同的。当我运行VB代码时,我得到一个匹配。当我运行C#代码时,我什么都没得到。
有人能看到我错过的东西吗?
答案 0 :(得分:17)
您是否还需要在C#中转义文件名? E.g:
@"c:\temp\abc.exe"