Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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# 如何实现MSDOS样式的模式匹配(通配符)?_C# - Fatal编程技术网

C# 如何实现MSDOS样式的模式匹配(通配符)?

C# 如何实现MSDOS样式的模式匹配(通配符)?,c#,C#,在C#中进行MSDOS样式的模式匹配有什么简单的方法吗 我对RegEx非常满意;但是,我需要msdos样式的模式匹配 预期样本: foo???.txt *.bat 我认为@zmbq的回答是有道理的。我想确保我没有丢失.NET中的任何内置功能。我想我必须创建一个扩展方法Dos2RegExPattern,将msdos模式转换为正则表达式,并在我的应用程序中使用它 您可以将MS-DOS模式转换为标准正则表达式格式。将?更改为,将*更改为*,不要忘记转义其他字符(变为\。) 例如,*.bat变成*\.

在C#中进行MSDOS样式的模式匹配有什么简单的方法吗

我对RegEx非常满意;但是,我需要msdos样式的模式匹配

预期样本:

foo???.txt
*.bat

我认为@zmbq的回答是有道理的。我想确保我没有丢失.NET中的任何内置功能。我想我必须创建一个扩展方法Dos2RegExPattern,将msdos模式转换为正则表达式,并在我的应用程序中使用它

您可以将MS-DOS模式转换为标准正则表达式格式。将
更改为
,将
*
更改为
*
,不要忘记转义其他字符(
变为
\。

例如,
*.bat
变成
*\.bat
文件???.dat
变成
文件…\.dat

编辑:

正如@hvd在评论中指出的那样,MS-DOS中的
根据其位置匹配一个字符或不匹配任何字符(
file???.dat
匹配所有文件,在
file
之后最多有三个字符,但
f?ile.dat
不匹配
file.dat
)。我怀疑您的任何用户都会注意到.Net中的…

没有:-

Directory.GetFiles (path, pattern)

完全按照OP的要求去做(请参见)

你所说的“MSDOS样式模式匹配”是什么意思?外卡?你能举一个“MSDOS风格模式匹配”的例子吗?我已经编辑了这篇文章以匹配答案(这可能是你想要的)。如果你想要一些不同的东西,请随意再编辑一次。谢谢你,阿列克谢,例子很好。我认为OP正在寻找相反的结果。将正则表达式转换为dos。也许这和tho说的是一样的,他正要发布同样的答案,但我会用贪婪的版本来替换*?相反,我当然不希望,相反的方法是不可能的,MS-DOS的模式比正则表达式弱。我已经很久没有使用DOS了,但我认为
file???。dat在
file
之后最多匹配三个字符,不完全是三个。哇,我没有说它匹配一个或没有字符。我认为
f?ile.dat
file.dat
不匹配。但我不记得确切的规则