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