正则表达式“\\u002E[^\x5C]*$”在 C# 中不起作用
Regex expression "\\u002E[^\x5C]*$" not working in C#
我正在使用 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: 'parsing ".[^]*$" - Unterminated [] set.'
据我所知,这组括号似乎已终止,我看不出有什么问题,但它仍然不起作用。我尝试添加和删除额外的反斜杠,使用 Unicode .
和 \
,常规 .
和 \
在它们之前使用转义字符,将字符串分成多个部分,并将 []
替换为 ()
。似乎没有任何效果,而且我不断收到同样的错误。
尝试Regex rx = new Regex(@"\u002E[^\x5C]*$");
。字符串前的 @
告诉系统按字面解释每个字符。如果有任何字符您想使用 C# 的转义序列(而不是那些特定于正则表达式的字符!),您应该能够将字符串拆分为多个并将其与 +
.
连接起来
这个字符串:
"\u002E[^\x5C]*$"
被编译器转换成这个字符串:
".[^\]*$"
转义码由编译器处理,而不是正则表达式引擎。
你的逃跑尝试:
"\u002E[^\x5C]*$"
生成了这个字符串
"\u002E[^\]*$"
这仍然允许正则表达式引擎看到 \]
(转义反斜杠)而不是由反斜杠组成的否定字符 class。
禁用带有 @
前缀的转义码的编译器解释将起作用,转义 每个 反斜杠也是如此:
"\u002E[^\x5C]*$"
我可以提醒您 Windows 也将正斜杠视为有效的目录分隔符,例如
C:/Users/.default/.profile/
是目录的有效名称。
最后,与其对名称进行模式匹配,不如直接看用户输入的确切名称是否存在,是目录还是文件?因为这也可以是目录的名称:
C:\Users\.default\.profile
我正在使用 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: 'parsing ".[^]*$" - Unterminated [] set.'
据我所知,这组括号似乎已终止,我看不出有什么问题,但它仍然不起作用。我尝试添加和删除额外的反斜杠,使用 Unicode .
和 \
,常规 .
和 \
在它们之前使用转义字符,将字符串分成多个部分,并将 []
替换为 ()
。似乎没有任何效果,而且我不断收到同样的错误。
尝试Regex rx = new Regex(@"\u002E[^\x5C]*$");
。字符串前的 @
告诉系统按字面解释每个字符。如果有任何字符您想使用 C# 的转义序列(而不是那些特定于正则表达式的字符!),您应该能够将字符串拆分为多个并将其与 +
.
这个字符串:
"\u002E[^\x5C]*$"
被编译器转换成这个字符串:
".[^\]*$"
转义码由编译器处理,而不是正则表达式引擎。
你的逃跑尝试:
"\u002E[^\x5C]*$"
生成了这个字符串
"\u002E[^\]*$"
这仍然允许正则表达式引擎看到 \]
(转义反斜杠)而不是由反斜杠组成的否定字符 class。
禁用带有 @
前缀的转义码的编译器解释将起作用,转义 每个 反斜杠也是如此:
"\u002E[^\x5C]*$"
我可以提醒您 Windows 也将正斜杠视为有效的目录分隔符,例如
C:/Users/.default/.profile/
是目录的有效名称。
最后,与其对名称进行模式匹配,不如直接看用户输入的确切名称是否存在,是目录还是文件?因为这也可以是目录的名称:
C:\Users\.default\.profile