Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式"\\u002E[^\x5C]*$”;不在C语言中工作#_C#_Regex_Directory_Filepath - Fatal编程技术网

C# 正则表达式"\\u002E[^\x5C]*$”;不在C语言中工作#

C# 正则表达式"\\u002E[^\x5C]*$”;不在C语言中工作#,c#,regex,directory,filepath,C#,Regex,Directory,Filepath,我正在用C#编写一个WPF程序,它允许手动输入目录路径。我的用户不是有经验的计算机用户,可能会输入文件路径而不是目录路径 我已经创建了一个正则表达式,它在RegExr网站上的工作方式完全符合我的要求,但在我的C#代码中失败了。每当用户输入的路径末尾存在文件扩展名时,它就会触发。表达方式如下: \x2e[^\x5c]*$ 我试过用这个来做实验 using System; using System.Text.RegularExpressions; using System.Windows; pub

我正在用C#编写一个WPF程序,它允许手动输入目录路径。我的用户不是有经验的计算机用户,可能会输入文件路径而不是目录路径

我已经创建了一个正则表达式,它在RegExr网站上的工作方式完全符合我的要求,但在我的C#代码中失败了。每当用户输入的路径末尾存在文件扩展名时,它就会触发。表达方式如下:

\x2e[^\x5c]*$

我试过用这个来做实验

using System;
using System.Text.RegularExpressions;
using System.Windows;

public partial class MainWindow : Window
{
    private void ConvertFile(object sender, RoutedEventArgs e)
    {
        Regex rx = new Regex("\u002E[^\x5C]*$");
    }
}
我希望该函数能按预期工作,但却出现以下错误:

System.ArgumentException:'正在分析“[^]*$”-未终止的[]集。'


据我所知,括号集似乎被终止了,我看不出有什么问题,但它仍然不起作用。我尝试过添加和删除额外的反斜杠,使用Unicode
\
,常规的
\
前面带有转义字符,将字符串分成多个部分,并将
[]
替换为
()
。似乎什么都不起作用,我一直收到相同的错误。

尝试
Regex rx=new Regex(@“\u002E[^\x5C]*$”。字符串前面的
@
命令系统逐字解释每个字符。如果有任何字符希望使用C#的转义序列(而不是特定于正则表达式!),您应该能够将字符串拆分为多个字符,并将其与
+

尝试
正则表达式rx=new regex(@“\u002E[^\x5C]*$”。字符串前面的
@
命令系统逐字解释每个字符。如果有任何字符希望使用C#的转义序列(而不是特定于正则表达式!),您应该能够将字符串拆分为多个字符,并将其与
+

此字符串连接:

"\u002E[^\x5C]*$"
".[^\]*$"
由编译器转换为以下字符串:

"\u002E[^\x5C]*$"
".[^\]*$"
转义码由编译器处理,而不是由正则表达式引擎处理

你试图逃跑:

"\\u002E[^\x5C]*$"
生成了这个字符串

"\u002E[^\]*$"
这仍然允许正则表达式引擎查看
\]
(转义反斜杠),而不是由反斜杠组成的否定字符类

禁用带有
@
前缀的转义码的编译器解释将起作用,转义每个反斜杠也将起作用:

"\\u002E[^\\x5C]*$"
请允许我提醒您,例如,Windows也将正斜杠视为有效的目录分隔符

C:/Users/.default/.profile/
是目录的有效名称

最后,与其模式匹配名称,为什么不直接查看用户输入的确切名称是否存在,以及它是目录还是文件?因为这也可以是目录的名称:

C:\Users\.default\.profile
此字符串:

"\u002E[^\x5C]*$"
".[^\]*$"
由编译器转换为以下字符串:

"\u002E[^\x5C]*$"
".[^\]*$"
转义码由编译器处理,而不是由正则表达式引擎处理

你试图逃跑:

"\\u002E[^\x5C]*$"
生成了这个字符串

"\u002E[^\]*$"
这仍然允许正则表达式引擎查看
\]
(转义反斜杠),而不是由反斜杠组成的否定字符类

禁用带有
@
前缀的转义码的编译器解释将起作用,转义每个反斜杠也将起作用:

"\\u002E[^\\x5C]*$"
请允许我提醒您,例如,Windows也将正斜杠视为有效的目录分隔符

C:/Users/.default/.profile/
是目录的有效名称

最后,与其模式匹配名称,为什么不直接查看用户输入的确切名称是否存在,以及它是目录还是文件?因为这也可以是目录的名称:

C:\Users\.default\.profile

逃逸反斜杠,例如“\\u002E[^\x5C]*$”或使用文字运算符@,例如“\u002E[^\x5C]*$”@RamblinRose:他需要逃逸两个反斜杠,而不仅仅是第一个。@BenVoigt,的确,好眼睛。逃逸反斜杠,例如“\\u002E[^\x5C]*$”或使用文字运算符@,例如@“\u002E[^\x5C]*$”@兰布林罗斯:他需要摆脱两个反斜杠,而不仅仅是第一个反斜杠。@BenVoigt的确,好眼睛。这个反斜杠起作用了!非常感谢,这一整天都在困扰着我!很乐意帮忙!作为提示,您可以点击问题旁边的复选标记,将问题的答案标记为“已接受”。这意味着原始问题已按您的喜好解决。太棒了,请检查您的答案。希望这也能帮助其他人走出困境。@成功了!非常感谢,这一整天都在困扰着我!很乐意帮忙!作为提示,您可以点击问题旁边的复选标记,将问题的答案标记为“已接受”。这意味着原始问题已按您的喜好解决。太棒了,请检查您的答案。希望这也能帮助其他人。