目的:
使用正则表达式仅显示路径的实际文件夹名称。例如,
C:\Users\Harti\GitHub
应该简化为
GitHub
应该有一个进一步的规则来阻止用户将驱动器作为文件夹输入。
的问题:
if
条件返回False
,我无法弄清楚原因。
带有Regex.Replace(...)
的行抛出一个ArgumentException告诉我(粗略翻译),在分析序列^.+\([^\]+)$
时,那里"是一个未完成的[]子句"。
我的想法:
我选择的任何编辑都标记着" C:\"作为指定表达式的匹配。
[^\\]
中的双反斜杠可能会被视为实际转义结束方括号,从而使正则表达式无效。但是,对字符串使用@"..."
会导致相同的异常。
请你指出我可能遗失的任何东西?我对VS和C#完全陌生,所以可能还有一些我不知道的异常。
代码:
static void Main(string[] args)
{
string folderPath = "C:\\";
string disallowedPattern = "^[A-Z]:\\$";
if (Regex.IsMatch(folderPath, disallowedPattern))
{
Console.WriteLine("You chose a drive! Not cool!");
}
else
{
string suggestedProjectName = Regex.Replace(folderPath, "^.+\\([^\\]+)$", "$1");
Console.WriteLine(suggestedProjectName);
}
}
答案 0 :(得分:3)
为什么不使用System.IO.Path?
而不是使用正则表达式来解析路径信息答案 1 :(得分:2)
可能你应该写
string disallowedPattern = "^[A-Z]:\\\\$";
因为反斜杠必须在正则表达式和C字符串文字中进行转义。