C# 正则表达式"\\u002E[^\x5C]*$”;不在C语言中工作#
我正在用C#编写一个WPF程序,它允许手动输入目录路径。我的用户不是有经验的计算机用户,可能会输入文件路径而不是目录路径 我已经创建了一个正则表达式,它在RegExr网站上的工作方式完全符合我的要求,但在我的C#代码中失败了。每当用户输入的路径末尾存在文件扩展名时,它就会触发。表达方式如下: \x2e[^\x5c]*$ 我试过用这个来做实验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
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的确,好眼睛。这个反斜杠起作用了!非常感谢,这一整天都在困扰着我!很乐意帮忙!作为提示,您可以点击问题旁边的复选标记,将问题的答案标记为“已接受”。这意味着原始问题已按您的喜好解决。太棒了,请检查您的答案。希望这也能帮助其他人走出困境。@成功了!非常感谢,这一整天都在困扰着我!很乐意帮忙!作为提示,您可以点击问题旁边的复选标记,将问题的答案标记为“已接受”。这意味着原始问题已按您的喜好解决。太棒了,请检查您的答案。希望这也能帮助其他人。